From 25b225dd2d37157479ec247573fa7fef58b6b19e Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 12 Jan 2024 16:10:02 +0100 Subject: [PATCH 001/120] 2.4.2 Release (#752) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Made API keys hidden (password fields) in the query translator module * Legend on bottom, working on scrolling * Scrolling added, legend gets cut off. Need to set width according to content * Set autowidth depending on length of array * wednesday * Added new report action type for tables: multiselect checkboxes (#664) * Work in progress on table checkboxes * Fix handling external updates of parameter values in parameter selector * Improved handling of multiselector parameters for tables with checkboxes * Removed console log statement. Fix invalid behaviour * Updated comments * Added multiselect value limit * Clean up action rule create modal * Added docs on multiple selection with table rows and report actions * Fix handling external updates of parameter values in parameter selector (#663) * Fix handling external updates of parameter values in parameter selector * Removed console log statement. Fix invalid behaviour * Updated comments * Feature/new dashboard load UI (#657) * Added sidebar prototype * Return of the sidebar * Add database selector to sidebar * Iterating on the dashboard sidebar interface * Fixed usage of hardcoded color * Updated dashboard loading mechanism, iterating * Updated dashboard loading mechanism, iterating * Updated file structure for dashboard sidebar * Improved modal/menu handling for dashboard load * Import/export dashboards * New dashboard sharing interface * Removed old save/load modal * Finalized v1 of the new multi-dashboard UI * removing useless imports * Removed old isLoaded in state of dashboard load screen. Updated warning buttons --------- Co-authored-by: Alfred Rubin * monday * Horizontal/Vertical legend switch * Sorted graph sizing with padding * Tuesday Afternoon * Mapped bar chart event to standardized action event * Wednesday Morning * Added event handling for actions on bar charts * Fixed styling for bar chart report action * Bump @babel/traverse from 7.21.4 to 7.23.2 in /gallery (#670) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.4 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @babel/traverse from 7.20.13 to 7.23.2 (#669) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.13 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.23 to 8.4.31 in /gallery (#656) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.21 to 8.4.31 (#655) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * added minimum bar height * Text hard to read on dark theme (#668) * Hiding columns in Table does not work #374 * Revert "Hiding columns in Table does not work #374" This reverts commit dc36d84e9cc3de2dc3f8bd093328b991b22aadbb. * Text hard to read on Dark Theme #667 * Fixed code style --------- Co-authored-by: Niels de Jong * Monday * Hotfix for wrong default parameter replacement in markdown * Add back arrow on connection modal (#675) * fix: add back arrow on connection modal * WIP on improved back arrow for connection modal * Fixed dismissable connection modal based on connected state and standalone mode --------- Co-authored-by: Niels de Jong * VULCAN-126/Override default message (#683) * Override default message * Refactored code * refactored code * Added docs --------- Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> * Added report action functionality in bar chart when using BarComponent * Fix/hiding columns in table (#685) * fixed the issues with not being able to close columns in table chart * reverted back to orignal testpass --------- Co-authored-by: aleksandarneo4j * Fix parameters values (#641) Co-authored-by: Niels de Jong * Removed adjustedData state for min bar height * Added comments to BarChart.tsx * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues (#682) * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues * Handling for dashboards in standalone mode * cleaning code followign SonarCloud code smells * changed migration function to reduce duplication, tested on twitter example dashboard * changed how we fetch the latest version of the code * changed migration function to reduce duplication, to test for applicationThunks --------- Co-authored-by: Alfred Rubin * Feature/gantt chart (#684) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * Added package * added new field to disable a parameter selector (in this way it works only with actions) * Gantt Chart Visualization * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Gantt chart with live data * Improved robustness of form / parameter select component * Improve Gantt chart customizability. Added report action for Gantt charts * Added wait-logic for form submission, so that all fields are debounced and set correctly * Added multiline support for freetext parameter selector * Added support for drilled-down parameters used in the forms component * Fixed issues with parameter selector/forms, improve usability * Added default advanced settings to form * hanging if orders to prevent wrong casting to number for certain edge cases (EX: string with numbers and E : 00E1304) * adding more options to gantt chart and adding variable calendar type * Prototype of Frappe Gantt implementation * Improved version of frappe gantt * work in progress on new gantt chart * Clean up code structure * Clean up and documenting Gantt chart * Gantt chart stability & arrow directions * Handling task dependency directions in Gantt chart * Improved styling * More optimization & style fixes. * Added docs for Gantt Chart * Added rule-based styling and actions to Gantt chart * Finalized Gantt chart docs, examples, and fallback date parsing * removing code smells * trying to plug quarter date format and cleaning code * cleaning code accordingly to SonarCloud * Fixed UI not populating correctly for rule-based styling and actions * Gantt - fixed default width/height for bars. Visible labels. Handling quarters * Updated label positions * Fixed inspect modal for Gantt chart, fixed arrow spacing between tasks * Fixed linting issues --------- Co-authored-by: Niels de Jong Co-authored-by: Alfred Rubin * adding in advanced config for the graph viz more graph layout config … (#690) * adding in advanced config for the graph viz more graph layout config options * added doc about the new advanced setting --------- Co-authored-by: aleksandarneo4j * Adding form widget as a new extension (#568) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * added new field to disable a parameter selector (in this way it works only with actions) * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Improved robustness of form / parameter select component * Updated docs, added clear form button * removing code smells * cleaning code followign SonarCloud code smells * cleaning code followign SonarCloud code smells * removing code smells * Intelligent parameters clearing in forms --------- Co-authored-by: Alfred Rubin * Removed dependencies, reverted reportconfig bar chart order * Changed BarComponent always renders now so pointer always shows on bar. Changed lamda if statement to more readable syntax, removed handleBarClick function because unused. Removed minBarHeight arg from useEffect * moved onClick logic to handleBarClick const * Model Examples and LLM improvements (#600) * now when changing database in a card the query will retrigger correctly * adding schema sampling with apoc.meta.data and changing system prompt * cleaning code and adding examples management * starting working on plugging examples to the model * examples plugged to state and to the modelClient to add the example prompy * fixed examples in modelCLient because the there was a missing edge case * added Q&A form for AI training * Updated styling, added validation * validation on q&a form (to talk with Marius about UX and styling) * watching smells on sonarqube * Question Answer form updated with tailwind and needle styling * WIP creating edit Q&A modal * working on examples modal * WIP trying to get index prop to pass for ExampleEditorModal to work properly * fix * WIP * latest * plugging modelExamples table to the state and changing folder structure * Issue with addModelExample action call * working on model examples and fixing prompt behaviour * Paginated table implemented. Needs styling. * pagination done * Added cypher code editor. No line numbers right now - would be useful. Also no label for cypher editor * Added loading button when saving, error message if cypher editor is empty upon submission, removed legacy code * latest * ready for review * changing prompt * Updated. Fixed editing. Ready for Review * fixing code smells * WIP * WIP ExampleDisplayTable2 * styling and pagination needed * table done with styling, pagination * deleted old table * code smell 2/7 check * check smells * Checking smells * moving component inside const * Table ready for review * Added initial pageSize * Fixed instructions on 'tweak model' screen * Fixed instructions on 'tweak model' screen * Got rid of show number of queries per page * checking code smells * removing useless row from task definition * changing folder names and changin from lazy import to normal on in ExtensionConfig * removing code smells * removing code smells * removing code smells * Fixed double dependency on react-table * refactoring code according to Sonarcube code smelles and fixed play button on card vie w to rerun the chatCompletion * Improved names * Usability improvements for LLM extension * Updating docs * Added docs for custom LLM examples --------- Co-authored-by: Alfred Rubin Co-authored-by: jacobbleakley-neo4j Co-authored-by: Niels de Jong * Extracted margin logic from BarChartComponent into new const * Extracted legend logic into separate function * extracted onChange and onInputChange to separate functions * Issue with setting customWidth * refactor: add explicit enum constants * Added release notes for 2.4 + bonus feature (keyboard shortcut to run query from the editor) (#694) * Release notes for 2.4 * Updated release notes. Added quick feature to run reports with keyboard shortcuts * Finalized release notes * Hotfix for not clearing disabled parameters in forms * Finalized release notes * Removed old gantt chart dependency * Bump docs version to 2.4 * Fixed issue with CodeMirror editor not capturing keys in Cypress test * Hotfix for automigrated tree layouts * Hotfixes for Sonarqube issues * minor fix in the forms where it wasn't getting the correct value in the settings * Fix hiding column prefix (#695) * fixing missing feature that was hiding columns starting with __ * removing test console log * removing code smell * removing code smell * fixing test * Bumped outdated version numbers --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong * fixing merge * Added manual legendWidth back in * Font-color not changed in graph contextual popups when in dark mode #621 * Fixed styling of report action and moved visualisation logic to outside table elements in ARCM * Friday * refactor: extract unions to explicit types * Updated documentation * fixed most code smells * Fix for only displaying active databases in the sidebar (#698) * Removed checked in html file * fixed typos, dependencies, UX * Fix bugs in actions helper * refactor: add value to input * refactor: update any types * Enabled page switch actions on bar charts * Change on filter tooltip to avoid hide table data * removing code smells * Fixed bug (hopefully) * Added comments for styles naming convention * Bump @adobe/css-tools from 4.3.1 to 4.3.2 (#720) * 2.4.0 update (#696) * Made API keys hidden (password fields) in the query translator module * Added new report action type for tables: multiselect checkboxes (#664) * Work in progress on table checkboxes * Fix handling external updates of parameter values in parameter selector * Improved handling of multiselector parameters for tables with checkboxes * Removed console log statement. Fix invalid behaviour * Updated comments * Added multiselect value limit * Clean up action rule create modal * Added docs on multiple selection with table rows and report actions * Fix handling external updates of parameter values in parameter selector (#663) * Fix handling external updates of parameter values in parameter selector * Removed console log statement. Fix invalid behaviour * Updated comments * Feature/new dashboard load UI (#657) * Added sidebar prototype * Return of the sidebar * Add database selector to sidebar * Iterating on the dashboard sidebar interface * Fixed usage of hardcoded color * Updated dashboard loading mechanism, iterating * Updated dashboard loading mechanism, iterating * Updated file structure for dashboard sidebar * Improved modal/menu handling for dashboard load * Import/export dashboards * New dashboard sharing interface * Removed old save/load modal * Finalized v1 of the new multi-dashboard UI * removing useless imports * Removed old isLoaded in state of dashboard load screen. Updated warning buttons --------- Co-authored-by: Alfred Rubin * Bump @babel/traverse from 7.21.4 to 7.23.2 in /gallery (#670) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.4 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @babel/traverse from 7.20.13 to 7.23.2 (#669) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.13 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.23 to 8.4.31 in /gallery (#656) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.21 to 8.4.31 (#655) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Text hard to read on dark theme (#668) * Hiding columns in Table does not work #374 * Revert "Hiding columns in Table does not work #374" This reverts commit dc36d84e9cc3de2dc3f8bd093328b991b22aadbb. * Text hard to read on Dark Theme #667 * Fixed code style --------- Co-authored-by: Niels de Jong * Hotfix for wrong default parameter replacement in markdown * Add back arrow on connection modal (#675) * fix: add back arrow on connection modal * WIP on improved back arrow for connection modal * Fixed dismissable connection modal based on connected state and standalone mode --------- Co-authored-by: Niels de Jong * VULCAN-126/Override default message (#683) * Override default message * Refactored code * refactored code * Added docs --------- Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> * Fix/hiding columns in table (#685) * fixed the issues with not being able to close columns in table chart * reverted back to orignal testpass --------- Co-authored-by: aleksandarneo4j * Fix parameters values (#641) Co-authored-by: Niels de Jong * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues (#682) * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues * Handling for dashboards in standalone mode * cleaning code followign SonarCloud code smells * changed migration function to reduce duplication, tested on twitter example dashboard * changed how we fetch the latest version of the code * changed migration function to reduce duplication, to test for applicationThunks --------- Co-authored-by: Alfred Rubin * Feature/gantt chart (#684) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * Added package * added new field to disable a parameter selector (in this way it works only with actions) * Gantt Chart Visualization * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Gantt chart with live data * Improved robustness of form / parameter select component * Improve Gantt chart customizability. Added report action for Gantt charts * Added wait-logic for form submission, so that all fields are debounced and set correctly * Added multiline support for freetext parameter selector * Added support for drilled-down parameters used in the forms component * Fixed issues with parameter selector/forms, improve usability * Added default advanced settings to form * hanging if orders to prevent wrong casting to number for certain edge cases (EX: string with numbers and E : 00E1304) * adding more options to gantt chart and adding variable calendar type * Prototype of Frappe Gantt implementation * Improved version of frappe gantt * work in progress on new gantt chart * Clean up code structure * Clean up and documenting Gantt chart * Gantt chart stability & arrow directions * Handling task dependency directions in Gantt chart * Improved styling * More optimization & style fixes. * Added docs for Gantt Chart * Added rule-based styling and actions to Gantt chart * Finalized Gantt chart docs, examples, and fallback date parsing * removing code smells * trying to plug quarter date format and cleaning code * cleaning code accordingly to SonarCloud * Fixed UI not populating correctly for rule-based styling and actions * Gantt - fixed default width/height for bars. Visible labels. Handling quarters * Updated label positions * Fixed inspect modal for Gantt chart, fixed arrow spacing between tasks * Fixed linting issues --------- Co-authored-by: Niels de Jong Co-authored-by: Alfred Rubin * adding in advanced config for the graph viz more graph layout config … (#690) * adding in advanced config for the graph viz more graph layout config options * added doc about the new advanced setting --------- Co-authored-by: aleksandarneo4j * Adding form widget as a new extension (#568) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * added new field to disable a parameter selector (in this way it works only with actions) * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Improved robustness of form / parameter select component * Updated docs, added clear form button * removing code smells * cleaning code followign SonarCloud code smells * cleaning code followign SonarCloud code smells * removing code smells * Intelligent parameters clearing in forms --------- Co-authored-by: Alfred Rubin * Model Examples and LLM improvements (#600) * now when changing database in a card the query will retrigger correctly * adding schema sampling with apoc.meta.data and changing system prompt * cleaning code and adding examples management * starting working on plugging examples to the model * examples plugged to state and to the modelClient to add the example prompy * fixed examples in modelCLient because the there was a missing edge case * added Q&A form for AI training * Updated styling, added validation * validation on q&a form (to talk with Marius about UX and styling) * watching smells on sonarqube * Question Answer form updated with tailwind and needle styling * WIP creating edit Q&A modal * working on examples modal * WIP trying to get index prop to pass for ExampleEditorModal to work properly * fix * WIP * latest * plugging modelExamples table to the state and changing folder structure * Issue with addModelExample action call * working on model examples and fixing prompt behaviour * Paginated table implemented. Needs styling. * pagination done * Added cypher code editor. No line numbers right now - would be useful. Also no label for cypher editor * Added loading button when saving, error message if cypher editor is empty upon submission, removed legacy code * latest * ready for review * changing prompt * Updated. Fixed editing. Ready for Review * fixing code smells * WIP * WIP ExampleDisplayTable2 * styling and pagination needed * table done with styling, pagination * deleted old table * code smell 2/7 check * check smells * Checking smells * moving component inside const * Table ready for review * Added initial pageSize * Fixed instructions on 'tweak model' screen * Fixed instructions on 'tweak model' screen * Got rid of show number of queries per page * checking code smells * removing useless row from task definition * changing folder names and changin from lazy import to normal on in ExtensionConfig * removing code smells * removing code smells * removing code smells * Fixed double dependency on react-table * refactoring code according to Sonarcube code smelles and fixed play button on card vie w to rerun the chatCompletion * Improved names * Usability improvements for LLM extension * Updating docs * Added docs for custom LLM examples --------- Co-authored-by: Alfred Rubin Co-authored-by: jacobbleakley-neo4j Co-authored-by: Niels de Jong * Added release notes for 2.4 + bonus feature (keyboard shortcut to run query from the editor) (#694) * Release notes for 2.4 * Updated release notes. Added quick feature to run reports with keyboard shortcuts * Finalized release notes * Hotfix for not clearing disabled parameters in forms * Finalized release notes * Removed old gantt chart dependency * Bump docs version to 2.4 * Fixed issue with CodeMirror editor not capturing keys in Cypress test * Hotfix for automigrated tree layouts * Hotfixes for Sonarqube issues * minor fix in the forms where it wasn't getting the correct value in the settings * Fix hiding column prefix (#695) * fixing missing feature that was hiding columns starting with __ * removing test console log * removing code smell * removing code smell * fixing test * Bumped outdated version numbers --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong * fixing merge --------- Signed-off-by: dependabot[bot] Co-authored-by: Alfred Rubin Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harold Agudelo Co-authored-by: Jon Ander Oribe Co-authored-by: Antônio Hugo Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Co-authored-by: Aleksandar Co-authored-by: aleksandarneo4j Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: jacobbleakley-neo4j * Bump @adobe/css-tools from 4.3.1 to 4.3.2 Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.3.1 to 4.3.2. - [Changelog](https://github.com/adobe/css-tools/blob/main/History.md) - [Commits](https://github.com/adobe/css-tools/commits) --- updated-dependencies: - dependency-name: "@adobe/css-tools" dependency-type: indirect ... Signed-off-by: dependabot[bot] --------- Signed-off-by: dependabot[bot] Co-authored-by: Niels de Jong Co-authored-by: Alfred Rubin Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harold Agudelo Co-authored-by: Jon Ander Oribe Co-authored-by: Antônio Hugo Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Co-authored-by: Aleksandar Co-authored-by: aleksandarneo4j Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: jacobbleakley-neo4j * Feature/8raven (#705) * Title not editable in standalone mode * standalone load v1 (working) * load from database refinements with new conf var * config.json reset to defaults * first implementation - needs few refinements * index on feature/log: ceda481c first implementation - needs few refinements * added Tooltip for Save button in standalone mode * polished * fix on error notification * minor refinement in documentation * hide logout button in standalone mode * man merge d137081cfde4b2d5dcf1192b8a9be675e953bd0b * man chg 0484e44ed345e8a9008fcebc8753ddf881f038f1 * added configuration to allow multiple data DBs * fix on config-entrypoint and reorder parameters * bugfix on config-entrypoint.sh * fix to update standaloneDB for standaloneMultiDB * added useffect in card.tsx to save DB * query modified in saveDashboardThunks * updated config-entrypoint * added config parameter to set cusom Header * documentation * fix dirt in style.config * fix dirt in config.json * Update ApplicationConfig.ts fix dirt * moving logging logic to its own reducer * fixing new selector and small refactorings * cleaning code and testing standalone * adding database list check * changing version to 3.18 to address address Cve-2023-4863 and cve-2023-38039 * removing unused imports * working on final release * fixed dashboards sidebar error when the db doesn't contain any dashboard and tested standalone * removing useless import * removing change in runCypherQuery and reusing the status of the queryResult correctly to trigger db change * removing change in runCypherQuery and reusing the status of the queryResult correctly to trigger db change --------- Co-authored-by: BlackRaven Co-authored-by: BlackRaven <35220904+8Rav3n@users.noreply.github.com> Co-authored-by: Alfred Rubin * Fixed menu placement for node property selector in form modal * Fix race condition caused by incorrect date casted from serialized dashboard format * Parameter selector suggestions are now sorted by length * Improved styling of dashboard header buttons, download CSV button (#729) * Bumped version to 2.4.1 & added release notes (#731) * Bumped version to 2.4.1 * Updated release notes * Removed duplicate key in dependencies * Added release note detail on bar charts * fixing rule based styling wrong casting at number * Hotfix for broken custom header deployments * changing report config default options (#724) * changing report config default options * Minor style fixes --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong * Browser tab titles (#708) * 2.4.0 update (#696) * Made API keys hidden (password fields) in the query translator module * Added new report action type for tables: multiselect checkboxes (#664) * Work in progress on table checkboxes * Fix handling external updates of parameter values in parameter selector * Improved handling of multiselector parameters for tables with checkboxes * Removed console log statement. Fix invalid behaviour * Updated comments * Added multiselect value limit * Clean up action rule create modal * Added docs on multiple selection with table rows and report actions * Fix handling external updates of parameter values in parameter selector (#663) * Fix handling external updates of parameter values in parameter selector * Removed console log statement. Fix invalid behaviour * Updated comments * Feature/new dashboard load UI (#657) * Added sidebar prototype * Return of the sidebar * Add database selector to sidebar * Iterating on the dashboard sidebar interface * Fixed usage of hardcoded color * Updated dashboard loading mechanism, iterating * Updated dashboard loading mechanism, iterating * Updated file structure for dashboard sidebar * Improved modal/menu handling for dashboard load * Import/export dashboards * New dashboard sharing interface * Removed old save/load modal * Finalized v1 of the new multi-dashboard UI * removing useless imports * Removed old isLoaded in state of dashboard load screen. Updated warning buttons --------- Co-authored-by: Alfred Rubin * Bump @babel/traverse from 7.21.4 to 7.23.2 in /gallery (#670) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.4 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump @babel/traverse from 7.20.13 to 7.23.2 (#669) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.13 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.23 to 8.4.31 in /gallery (#656) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Bump postcss from 8.4.21 to 8.4.31 (#655) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: Harold Agudelo Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong * Text hard to read on dark theme (#668) * Hiding columns in Table does not work #374 * Revert "Hiding columns in Table does not work #374" This reverts commit dc36d84e9cc3de2dc3f8bd093328b991b22aadbb. * Text hard to read on Dark Theme #667 * Fixed code style --------- Co-authored-by: Niels de Jong * Hotfix for wrong default parameter replacement in markdown * Add back arrow on connection modal (#675) * fix: add back arrow on connection modal * WIP on improved back arrow for connection modal * Fixed dismissable connection modal based on connected state and standalone mode --------- Co-authored-by: Niels de Jong * VULCAN-126/Override default message (#683) * Override default message * Refactored code * refactored code * Added docs --------- Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> * Fix/hiding columns in table (#685) * fixed the issues with not being able to close columns in table chart * reverted back to orignal testpass --------- Co-authored-by: aleksandarneo4j * Fix parameters values (#641) Co-authored-by: Niels de Jong * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues (#682) * Updated dashboard format to 2.4. Double resolution for horizontal and vertical card placement. Fixed several small usability issues * Handling for dashboards in standalone mode * cleaning code followign SonarCloud code smells * changed migration function to reduce duplication, tested on twitter example dashboard * changed how we fetch the latest version of the code * changed migration function to reduce duplication, to test for applicationThunks --------- Co-authored-by: Alfred Rubin * Feature/gantt chart (#684) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * Added package * added new field to disable a parameter selector (in this way it works only with actions) * Gantt Chart Visualization * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Gantt chart with live data * Improved robustness of form / parameter select component * Improve Gantt chart customizability. Added report action for Gantt charts * Added wait-logic for form submission, so that all fields are debounced and set correctly * Added multiline support for freetext parameter selector * Added support for drilled-down parameters used in the forms component * Fixed issues with parameter selector/forms, improve usability * Added default advanced settings to form * hanging if orders to prevent wrong casting to number for certain edge cases (EX: string with numbers and E : 00E1304) * adding more options to gantt chart and adding variable calendar type * Prototype of Frappe Gantt implementation * Improved version of frappe gantt * work in progress on new gantt chart * Clean up code structure * Clean up and documenting Gantt chart * Gantt chart stability & arrow directions * Handling task dependency directions in Gantt chart * Improved styling * More optimization & style fixes. * Added docs for Gantt Chart * Added rule-based styling and actions to Gantt chart * Finalized Gantt chart docs, examples, and fallback date parsing * removing code smells * trying to plug quarter date format and cleaning code * cleaning code accordingly to SonarCloud * Fixed UI not populating correctly for rule-based styling and actions * Gantt - fixed default width/height for bars. Visible labels. Handling quarters * Updated label positions * Fixed inspect modal for Gantt chart, fixed arrow spacing between tasks * Fixed linting issues --------- Co-authored-by: Niels de Jong Co-authored-by: Alfred Rubin * adding in advanced config for the graph viz more graph layout config … (#690) * adding in advanced config for the graph viz more graph layout config options * added doc about the new advanced setting --------- Co-authored-by: aleksandarneo4j * Adding form widget as a new extension (#568) * Added forms skeleton * Completed form skeleton * WIP on forms interface * Form framework (data entry, running, success, error) added * Added comments * Adding fields specification interface * UI for specifying individual parameter in a form * changing Dockerfile to enable args during build * fixing typo on argument in dockerfile * reverting dockerfile to older version * Rendering parameters inside the form component * Added docs for forms. Improved stability on form * Fixed warnings in console * Finished IT test for forms report * added new field to disable a parameter selector (in this way it works only with actions) * Fixed issue where parameter values were not updated on external changes * Fixed styling on freetext spinner * Workaround for clipping menu selectors in Needle * fix(rule based styling): js doing is magic with parseFloat (some strings were casted to floats event if they were just strings starting with 0 * Added save button to form create UI * removing console logs * Fix for needle dropdowns not showing on modals * Sortable list for form parameters * Improving the drag 'n drop * Iterating on form interface * Final version of forms * Disabling test * Improved robustness of form / parameter select component * Updated docs, added clear form button * removing code smells * cleaning code followign SonarCloud code smells * cleaning code followign SonarCloud code smells * removing code smells * Intelligent parameters clearing in forms --------- Co-authored-by: Alfred Rubin * Model Examples and LLM improvements (#600) * now when changing database in a card the query will retrigger correctly * adding schema sampling with apoc.meta.data and changing system prompt * cleaning code and adding examples management * starting working on plugging examples to the model * examples plugged to state and to the modelClient to add the example prompy * fixed examples in modelCLient because the there was a missing edge case * added Q&A form for AI training * Updated styling, added validation * validation on q&a form (to talk with Marius about UX and styling) * watching smells on sonarqube * Question Answer form updated with tailwind and needle styling * WIP creating edit Q&A modal * working on examples modal * WIP trying to get index prop to pass for ExampleEditorModal to work properly * fix * WIP * latest * plugging modelExamples table to the state and changing folder structure * Issue with addModelExample action call * working on model examples and fixing prompt behaviour * Paginated table implemented. Needs styling. * pagination done * Added cypher code editor. No line numbers right now - would be useful. Also no label for cypher editor * Added loading button when saving, error message if cypher editor is empty upon submission, removed legacy code * latest * ready for review * changing prompt * Updated. Fixed editing. Ready for Review * fixing code smells * WIP * WIP ExampleDisplayTable2 * styling and pagination needed * table done with styling, pagination * deleted old table * code smell 2/7 check * check smells * Checking smells * moving component inside const * Table ready for review * Added initial pageSize * Fixed instructions on 'tweak model' screen * Fixed instructions on 'tweak model' screen * Got rid of show number of queries per page * checking code smells * removing useless row from task definition * changing folder names and changin from lazy import to normal on in ExtensionConfig * removing code smells * removing code smells * removing code smells * Fixed double dependency on react-table * refactoring code according to Sonarcube code smelles and fixed play button on card vie w to rerun the chatCompletion * Improved names * Usability improvements for LLM extension * Updating docs * Added docs for custom LLM examples --------- Co-authored-by: Alfred Rubin Co-authored-by: jacobbleakley-neo4j Co-authored-by: Niels de Jong * Added release notes for 2.4 + bonus feature (keyboard shortcut to run query from the editor) (#694) * Release notes for 2.4 * Updated release notes. Added quick feature to run reports with keyboard shortcuts * Finalized release notes * Hotfix for not clearing disabled parameters in forms * Finalized release notes * Removed old gantt chart dependency * Bump docs version to 2.4 * Fixed issue with CodeMirror editor not capturing keys in Cypress test * Hotfix for automigrated tree layouts * Hotfixes for Sonarqube issues * minor fix in the forms where it wasn't getting the correct value in the settings * Fix hiding column prefix (#695) * fixing missing feature that was hiding columns starting with __ * removing test console log * removing code smell * removing code smell * fixing test * Bumped outdated version numbers --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong * fixing merge --------- Signed-off-by: dependabot[bot] Co-authored-by: Alfred Rubin Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harold Agudelo Co-authored-by: Jon Ander Oribe Co-authored-by: Antônio Hugo Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Co-authored-by: Aleksandar Co-authored-by: aleksandarneo4j Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: jacobbleakley-neo4j * Browser Tab titles * fix: dashboard tab title change * Added default tab title --------- Signed-off-by: dependabot[bot] Co-authored-by: Niels de Jong Co-authored-by: Alfred Rubin Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harold Agudelo Co-authored-by: Jon Ander Oribe Co-authored-by: Antônio Hugo Co-authored-by: Aleksandar Co-authored-by: aleksandarneo4j Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: jacobbleakley-neo4j * Fixed linting. Added dark mode fix for graphs (#743) * Adding in 3D graph visualization as an advanced visualization (#737) * Multiple relationships between nodes in 3D graph & self-loops * Refactoring graph code * Renamed files for graph visualization interface * Refactored 2D/3D graph to share a common base * Enabled report actions * Finalized 3D graph code * Added docs for 3D graph * Fixed non-https placeholder for advanced setting * Actions/rule-based styling for 3d graph * Improved handling of draft dashboards in the sidebar, allowing to distinguish between save/overwrite (#734) * Improved handling of draft dashboards in the sidebar, allowing to distinguish between logical saves/overwrites * Ordering dashboard list by name rather than edit date * Added parameter select setting for autopopulating first selector value (#746) * Added setting for autoselecting first parameter select value * Sorting returned auto selector values * Selecting the first value of the suggestions correctly * 2.4.2 Release Notes (#745) * Added 2.4.2 release notes template * WIP on changelog * Finalized release notes * Collection of bug fixes for the 2.4.2 release (#744) * Fixed issue where table action rule creation modal displayed invalid suggestions * Add support for links in table actions, as well as improved rendering of links in markdown * No longer rendering empty buttons for missing values in table actions * Fix number formatting to always use en-US locale * Fixed issue where dashboard database was not set correctly for share links without credentials * Fixed dashboard title visibility in sidebar * Added missing setting to pie chart configuration * Clean up code, remove old console.log statements * Stability and UX for table checkbox actiosn * Handling shared dashboards in standalone mode * Added hidden setting for hiding the plaintext password warning. Fixed issue with casting null dates * Style tweaks for reports without footers * Fixed styling defaults for bar chart * Fixed fullscreen views * Freetext parameter with manual save style fixes * clean up graph editing modal * Correction to release notes * Robustness of actions rule create modal * Improved comments * Hotfix for typo in release notes * Final docs for 2.4.2 release --------- Signed-off-by: dependabot[bot] Co-authored-by: jacobbleakley-neo4j Co-authored-by: Alfred Rubin Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Harold Agudelo Co-authored-by: Jon Ander Oribe Co-authored-by: Antônio Hugo Co-authored-by: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Co-authored-by: Aleksandar Co-authored-by: aleksandarneo4j Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: Felipe Rodrigues de Santana Freitag Co-authored-by: BlackRaven Co-authored-by: BlackRaven <35220904+8Rav3n@users.noreply.github.com> --- .github/workflows/master-deployment.yml | 4 +- Dockerfile | 2 +- changelog.md | 13 + docs/modules/ROOT/images/graph3d.png | Bin 0 -> 53698 bytes docs/modules/ROOT/images/graph3dvirtual.png | Bin 0 -> 73405 bytes docs/modules/ROOT/nav.adoc | 1 + .../pages/developer-guide/deploy-a-build.adoc | 2 +- .../extensions/advanced-visualizations.adoc | 2 +- .../ROOT/pages/user-guide/reports/graph.adoc | 2 +- .../pages/user-guide/reports/graph3d.adoc | 137 +++++ .../ROOT/pages/user-guide/reports/index.adoc | 1 + gallery/tsconfig.json | 10 +- package.json | 5 +- public/style.css | 11 +- release-notes.md | 29 +- src/application/ApplicationActions.ts | 2 + src/application/ApplicationReducer.ts | 2 + src/application/ApplicationSelectors.ts | 1 + src/application/ApplicationThunks.ts | 59 ++- src/application/logging/LoggingThunk.ts | 6 +- src/card/Card.tsx | 2 +- src/card/settings/CardSettings.tsx | 2 +- src/card/settings/CardSettingsContent.tsx | 4 +- src/card/view/CardView.tsx | 14 +- src/chart/ChartUtils.ts | 5 +- src/chart/bar/BarChart.tsx | 60 ++- src/chart/bar/util.ts | 14 +- src/chart/graph/GraphChart.tsx | 22 +- src/chart/graph/GraphChartVisualization.ts | 16 + src/chart/graph/GraphChartVisualization2D.tsx | 120 +---- .../graph/GraphChartVisualizationBase.tsx | 98 ++++ .../graph/component/GraphChartCanvas.tsx | 15 +- .../graph/component/GraphChartEditModal.tsx | 1 - .../button/GraphChartFitViewButton.tsx | 10 +- src/chart/markdown/MarkdownChart.tsx | 5 +- .../component/FreeTextParameterSelect.tsx | 6 +- .../component/NodePropertyParameterSelect.tsx | 15 + src/chart/table/TableChart.tsx | 14 +- src/component/editor/CodeViewerComponent.tsx | 1 + src/config/ReportConfig.tsx | 327 +++--------- src/dashboard/Dashboard.tsx | 4 +- src/dashboard/DashboardThunks.ts | 6 +- src/dashboard/header/DashboardHeader.tsx | 2 +- .../header/DashboardHeaderPageTitle.tsx | 66 ++- src/dashboard/header/DashboardTitle.tsx | 57 ++- src/dashboard/sidebar/DashboardSidebar.tsx | 66 ++- .../sidebar/DashboardSidebarListItem.tsx | 19 +- .../menu/DashboardSidebarDashboardMenu.tsx | 29 +- .../modal/DashboardSidebarLoadModal.tsx | 4 +- .../modal/DashboardSidebarSaveModal.tsx | 4 +- .../actions/ActionsRuleCreationModal.tsx | 35 +- .../AdvancedChartsExampleConfig.ts | 51 ++ .../AdvancedChartsReportConfig.tsx | 466 +++++++----------- .../chart/graph3d/GraphChart3D.tsx | 14 + .../graph3d/GraphChartVisualization3D.tsx | 76 +++ .../styling/StyleRuleCreationModal.tsx | 19 +- src/extensions/styling/StyleRuleEvaluator.ts | 3 - src/modal/AboutModal.tsx | 2 +- src/report/Report.tsx | 2 +- src/report/ReportQueryRunner.ts | 4 + src/report/ReportRecordProcessing.tsx | 13 +- src/settings/SettingsModal.tsx | 2 +- src/utils/ObjectManipulation.ts | 18 +- tsconfig.json | 2 +- yarn.lock | 138 +++++- 65 files changed, 1241 insertions(+), 901 deletions(-) create mode 100644 docs/modules/ROOT/images/graph3d.png create mode 100644 docs/modules/ROOT/images/graph3dvirtual.png create mode 100644 docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc create mode 100644 src/chart/graph/GraphChartVisualizationBase.tsx create mode 100644 src/extensions/advancedcharts/chart/graph3d/GraphChart3D.tsx create mode 100644 src/extensions/advancedcharts/chart/graph3d/GraphChartVisualization3D.tsx diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index b059439b2..862ca50a6 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.1 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.2 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.1 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.2 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index d26384ee8..45c42b194 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,4 +43,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.1" +LABEL version="2.4.2" diff --git a/changelog.md b/changelog.md index be800d886..fd35b5bf1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,16 @@ +## NeoDash 2.4.2 +This is a release with a large amount of quality of life improvements, as well as some new features: + +- Visualize graphs in 3D with the new 3D graph report. [#737](https://github.com/neo4j-labs/neodash/pull/737) +- Improved dashboard management sidebar and handling of drafts. [#734](https://github.com/neo4j-labs/neodash/pull/734) +- Added parameter select setting for autopopulating first selector value. [#746](https://github.com/neo4j-labs/neodash/pull/746) +- Improved UX for editing page names & dashboard titles. [#743](https://github.com/neo4j-labs/neodash/pull/743) +- Unified common settings for each report type. [#724](https://github.com/neo4j-labs/neodash/pull/724) +- Title of the browser tab NeoDash runs on is now automatically set to the dashboard name. [#708](https://github.com/neo4j-labs/neodash/pull/708) +- Fixed issue where invisible table columns were not handled correctly. [#695](https://github.com/neo4j-labs/neodash/pull/695) +- Miscellaneous bug fixes, style improvements & stability fixes. [#744](https://github.com/neo4j-labs/neodash/pull/744) + + ## NeoDash 2.4.1 This is a patch release following 2.4.0. It contains several new features for self-hosted (standalone) NeoDash deployments, as well as a variety of UX improvements for dashboard editors. diff --git a/docs/modules/ROOT/images/graph3d.png b/docs/modules/ROOT/images/graph3d.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8c8522fc406e0a1f2b8e2eea9675e1dbca3f67 GIT binary patch literal 53698 zcmeEuWmr^e+bAGNsR#%NNJt~yUDDzZ(k;^63>``cNQu;t(kk7JA}QT4#2_(rcg|VE ze&4;f-}!TXpX>9wkj1Pg?&t1$CR|ln{yq*F4hjm&eMJSCS12fV_)$>M7_jaFp9Jkt zIiR4RN?1!vt13!MQ>(f-T3Fkeqo6RwnZABapuo!1ZDR8Jb$34tGmZ=R)%*7!UcC+& z`2O?z;P;-a?(b>I1_ld{A1>U{XhX?S`%!Cq?*sKk1$%dqHf~L>lkbuRT-Cv6_*LTd z9d$9Bg%^r!%6CTs0tLD1vkHTQg1At-wb(hBQOflL?c!*%asszVsXc^)oA0(Ozb(TH z91lhpx-+dEXcx5nq5To{C3b9ad@x-`bbBZi7j26Y6-SQY9Npl>T_(k1Ce-19bBqMp zlyy>ioapZlUuf?2DNT&3adLBVTf9aI5s*1vC0}qdd$c6^-W>HfwFV92@ZlR~Owz|5 zg=oz~!4K7qyT4OE>iq6BluupGgujE*>B!n)-6{8w|J38|-3e<1BH#h0w{CpU@7-hI z*%5(2>~i0|3)jDQ53>aoMM~T-d4du$0bo?iTu0FY1VVWRJY%7thFPPa15c>H4;kNh~rRGQ;WKoSqQ(9k^9ed;4d*6D>pYMVGa&37|agl zVRv+~og7^Mb1dM19LP5uTZc zQ4ZwE|AmRa(0uzTfM;6@ZJoorMh8GPIw}cXd`sW@cgG zF{%u%jS7ikNyFzc=_qq@5QVwaAJ>KcwZVT!$0|`%^?nfeF39#qHo9~vIBM|dei%(x zf%E?ur}`4ji&Pnn%QPuPc7i-ri!_3aPs4%GN8?kfk=V1SD1twrM8(Q|8%Uh2x%-Wa zui8C-z{s379_mxwexRr*R zm@(!4CoC$Gcgb51URrK93`?Y#TZyw=<2}cF`fp+e?Y#VMLvk7;K0?~)6MZr*7&Mwb zy|?wpLXwIPt;(ikI#bR>_~R%rBSDHEXwrlKMJdTz#)rCgqM>(9OcU-`bejIY_XoS= zrby-*l0ABP6r>DW3U$kDBmJ9`ZqF=vfn`<|nZy~?!QkhYC;!LZDCh@I1IzwzM$;ga zoXYj~Tzm2dT4V80gF)h-nC|?!KSYww?kYM}1Dxho&ZW)?`;RG~D1n96 zqe#X6WHc8nYCD&}|JSh^a075-@5P08rNy>zrA5DV}5t;PWOjHr3C5mnSLx`ZdWxckU+7H~Wwj zYC?kk!T#Da^oHsVc#;6jMp^LKj^{dfv`?SID@e}z)=w>dl=SU@B`XJS2CzG$B zqk%&0^$(uN*~;1T+5oe;5}wQRMI{aqxmBaHlOl0v)PGPnw2$6UTy{Qi>TlMvm*ALu zjfux?eBNf+M-|``f4~I&-u({PSu9 z4y&5lfbFzQ7QxDfn-HP42GdgS?xx`X#N+kz&YKY)!M|==;sB?xl=@}H9kbp`NDzCH z^BJ>h9zt9r{p4@fa-&BZWcUB9PFbMOE_*r7*2;xA{+XE^aJk^qzbbL4sIIGq|1;ol z+OpwD0_I#mDrogO%_t(yL^=$j#4Zf8deh>v@{Gs(sE~n5dLlgzGm3Myb;Up%J_9>@ z5pO>FX&C?7pyrC`@Ox3%7I$;AZj89emEd8iJZ0aDCA5E_&_*NR&Ac8Fm|KFmuI>sy zkyc~lj}ha7HLZMPi5d{6%R6t17A)0k?$ou(f0<#{a#XKk9uC>NNou_&pp8@C`0Y2@ z+{N~#aeWfhYJi*JHNmP=*KKf`!IHYHw((?5;vfE(bjE&}?knT$IP`o|wtC8ndGtek zi~#KeyQ!v(PZQ6na3R;V0kgKtoC~Ii6Df5qt%&#KOk!!U_Clb!m2 zM8Z3h2FL6mf41i-kdu50m< z{jV<|A_(u=l*=`V{yHwq)KL|Y4ukWO-noPFy5|fPmV=b8y^fANu2lYgMTWKWFEjZ& zX3v7i`%J==yV)S_V(!1<;JJj+JgtbOZTM*BRpGQ_tGMoY!&yT0#L@a_m%;f??@|-u zaue21g}4fU7f4)`#I1B;>ayRsbs6{Ja4n;~= ztAvMr>EJp0s(^y8Heo`Gdq4Z8E&F-3jrWz40$_J4KcN5qR$A;dx!byLnr}In!G6<> zxC#}T())g-oaX&Y(Sg-K4sN+a8GwE|hacf4HBi6$Yi*%L-r=!f{ePqeh=-orDcoDyfl zh-5WdJZ=JE$R1*89<#3_$=I6TVfGQscIISTZd;UVSJAb@XWsH;e2Zt-^Rgp9yQ0k( zj%&~QV&6!eecW^(ym?yTw!O&PrD zf_Ee(L3k`PEaqL!>69go>p4<0Z+1%!Qtq6VMD4K#?$UVVf4;?_&)w33^RjLfS(k|kc*qHgE)*5+*$-E~D0K0dx< z`Aosed2b)vPuJFobhvSSQ3GOkBjqISqw?M86B>s3Kow-A~W2r$v8GOIh1P`Yy5w4 zF-~TB?Swc(0!TVRX^F?|I(Y8Kmg!)%>oHT6@Lqy{%vs*^*Tb$#!nxl@*he@=xJP&a zO~z_aHRZcUo5?498T$!-D7+|YwSZFlh;1^V^2YlH5MFk1hpV+#{ZcDqhcWu=4n*gv zF%^g60Y<(`s?Eje<|@aWZX%Hvy?#?}x#j!bd5`iGt0eJ|-`YH?Ez)@9ButR zaGAEQ*VmV}t*<^2uUPZlf=O7GG+*Gj4xc-Qe>>e6?|lN^8s4vt=@UJEba?SgQ&)>V zGigv)34a?A4_Kk=@S?oviwDD)^FGC11A6ydi|vw(+@vNNsV#}U!BxwglZ5)>ep&ba zR`P52&|E09u8-$~B;`*(7y8%1oo;UO7uvoH zP?sWpmpe3*zdKdW!_vFE+Wo?AC4^ypx8cg(Vj?Z9-`UFcd#Q`pUrlv*l_hl1J{mP^xk|VJ^2>QsyfRT3WI@n!RgG{WM+6*KQVCR) zt>@%*W%!1c_x7a~l5+XhrMR{Kwis!*W6|U3XSA^1f{^KFvdd$bFtwkBZsUjj?fs?8 zN)Fr+?hTTxt(o(i#b{At&OVIrO9<#r;L58l07-e7Vq*G122Y(%+^$hE}jWfs3K z{9UJ%-Xil<$Iwv+Ge)+uYdr9T2&*m|3KS_2X?U&13b`z>o-al+56${a^yFG%t>g%H?4YxCYIN*j9K#49r=B)38}zgmuk-Lh`oyRD=K@&t`4lF z&S>Pz3F@t*dsJnapGS?l@4RWK>`*uu(3?sa$vCI4Gko=_?bN2c4t-MAI^%k9h06hf zUG2ok`RE^DL&3B^j$nvG+{)JUI_1hsPs-{CDE?>h2);X*_Y~}&UmCD`&WQ9|BCeMv zWRI{8$KG1@O|~8zy0*9f+!j!qPt_@S7{1&1o6HqaBm{54v`obdSn~tzko;<%6c$Oe zO!tY4dv_;1=d&~(=OBmI@Kv{XPNI&N<=wB~lazwg%&V;=_@VI)q`qA*RIAj`*8k?4 zG5IzNbZ@V-ZhgWjel%2FS@_4S9h-6(mGF-blwu=kPP66C`r?Zx^}7Vw?`jr>*UFGtK(Hc{V)I8d>i?M^B*w*iFF^gjz}3B^X!n!-+!{LX;I<6 zFJ`wE+wO>Ez1!Ca+xIx6x9xz|*f(D946hFmoecUrR}T9ehrzDCY7%oJ4ATB_xuDnz zL!Moz>E%y~3)?I@6}trVOp`uMkiN@x?7vq{jLD`wa!}+HK8mWfVDeu5}$5Z|amEf35F}xtJH?ck@5Kj}?PcdGx9pXt!t@3*65-20Uu>i_;Q z!2ie?&SQM__55J6W#vEv!GpLdFLJqgPPIE08sI0eCc(<0dk|e6P3&;qp;Fu((=>fv z@h>E5KOLGLxbtiIaN6JDr*h}!*2ipb9y6y+F{y-$*9v2HQ*}LC(CS`2gS(9@&+Yvf z{Cq2*-jifDi0sTqaIy1G^$R256e_>n83&%$U)?;@Hz%gC2N7C0Qta|MuJt}9b6wcGGdG_FhpJEW*-nyf z*OQv`t`Z(OPoUnpVAOki@I{66Zs(x- zgz?W*Akd~xLGiKsSRae?PtXnIb8?d&(aJA6gvXB4=ATu20FSjnGDoCClvcZI+Dmv(*_C>eoGZTCu4 z(Cz*oOLWJev@u91e|r13;X=-O^%4MW@yBP|KbP=Ff5?CCoc$+qV&4FuJ;Hln`0kG- z4rqboPz+(--x?J8Hs}#DIppcIM)n7OW2u01_@^;p{DGg`WB{~|chZx8E^!59dJdLk znE%922LKu~<&*zKF@WMiJ6qVv&fLtz*ReloLLIA+1%$-m>umII%B{m6p8rYS4J3z1 z$hbZHgF~#sQQGq9pD+KJb^XE!u<7-~VW~gJkVOyhLLyci-k*fb00?<3Era>DBERK@ zM1YWbG&16UvVu3T!WbSt#lN$dDCl}Lfo1;-Fo4zn#qfU_?*AK>(8zBI`&;IM-ahnn z|0#U9k?&qo>?|E>SuNzCbKE@Ts%^CW3=NyVl$P=cNx&pJbgi?$AlHkqj{Mr{SGkYlH|zYVHWyGj0x3E^P`$uH2g(cq&!WFijA z5c7eLALX-Y<~KFw+sdu%`&0?CHo3&LDPdAoOlwMtTqM(o9R{I7miE!e>_W( z>_Z<8rQ!Fuh?7sLWS~k<=)^!;hBtuGdKAgJ{hyP)dhvSTqh+7;pqPEN;yXHQ^GL&J z{8P~gixPL6!jH^3t=^p-gtR=2N()coljUiUD?G=y`c`HV1Ntl%=S`WR_hC|4Xi*NrP&A=)_LwD`7@|E<>OPSw{Xn$vPG+J$(wtf$ zt+}3s4EA6ACTW9ZH9ajo$gZ#xL&C-{K+OG&v|wgT&>@PyJcJ=yW*crG7oGxpdCimm zQovG0jGrYE7dbP8dPpnsKCGM>-4FVo8l4*os;;$##Nj6*Mgk`6u;rHwbK#_4lG9w2 zSIqLhDM*WvySi&|><@`;A>caB$C0{V@OO3B+ttqTzrXpf%b-AnT7PsLv>W3|V0d|@ z#6n|K+50_>(|S=YovY*e3@s&ckM76fyUM;`5jQ(I*9kIX4#5}-|5zcPUtFPi)~JuN z0jHo5t7`nsyE1DMk7r2zzV;XmN>{SC(diC%XR$dVIZRu(n#Di8|4~t1m!#R(i7WI~ zTb%BM(DyXU6>4hkEINr7)LLY+_RnMCtb!?W*?CsjFY?u1B|qfPU$Hv@v2qAZW*%#` zgANvuUQyLYfO`|ZGd)1+u}4^IGjy)U_5=uR4>nR9;hp@{`{eX*pIqK2xOA2cPvt4@ ze)@?4H5?L_q5nDz7Ts_?VW9r>SI@G*GYeP>C);LQP4eE2%x*%fK9h|vWZ?cO%QvRl zejR65{zV2l8KBx=MGklsGj(dXfH{+VhTUh>^u5ndykbP=P#&b56P`P8!Qv%dw!fAc zn)~wQO6L`LrVF_0#FxjY3T8hgH9~3cM(%T2j8J^@%CiQPbmj z&XZJ%=9nEbSfvY#L+1l3lX>t-NXat^q>w^ipqPwmx!l^`SZ*}P*nnXZ=Z2;z_=soX z<=f1+4E+K>SIawkk2EbBHM;%YEh~suJYG~Zy-GN??E_Wbm^2cH>oVFw$|rb5-v!8L zKRV4{#v8N;j`riP4%ra!WMemRtl0oN3< z7C%(5Kcf5{u@^6nR+$mml%XifYgydmFH6A6wd0QcqQ1~xJ*H@pw6)ON-r(ze-Yi(b z{HLlhxsiFtrfp7>P-F)GQdkskm`(v2I+FV-6j8u~6pE=nw-Ocly~uJqSc`^^R%T<{ zcxH3c&FXEc(54>Yd|g^e4sR{y&-|{{zV^C-YWxHr_c=Y+(XGZPQ9Jw*`30%V2Tc}T z-MA2|D_b7ZtuA5VnWXQ}2z<`KG!LKOq?Z%r)Yu#kOnKj2$2Rq}FM$pW z9bRb+E63Vre4{P6qt|JXM9~vcmj1PZiU#-1s-YlD7-5Zv=Z0BcxQv2UOt$t@7Usi5 zvpk`w#aC|yXb8uX!=4)WC8iT59_*J@sq}uKcQ&oGkl=xRpb{VXK*cpevW(26XBDEC zO+6ywh(am_tCa8WPB>;9XukE>`F5i%mGWqjiYAhFqnW zn!hTnRY|Hjw8l*zT$xt6shkGCEU`TA@BRT;cF+2Ueempoo>B+pgqMo(;%lbs9Pv_=epAax=bfP?0G&XUHFUYhu>Z>QAw;(jyDn{i($BKZ%k^t?R%5>}PpPW6$4z%4O}nblW6#!hEMeN)1!0$3 zX>a8PNxWx$;4?7Hh;AP4@dy=LX&0ppJMIJ4aB{G8#(1V2snpvjegpG2_p$jo>biN! z*g0Kyjgl9BF@1J!E)qYlu`9pm%LMfn4O>r)YE4ba!F>C|6+0A>PQ5B8;3vQRock0h zX2rB+ZXmNS;kM@RsQva)L)*l)f=?-EUmxONqzxLOI5DMJdfX)n}q=uomN1w)-#1wiWEZE=j3hbQdE$zV4 zi|q0)(Y3o7+eum=++-M<30eD#au|vF-{?@0xG4vS6ah*;K`J0#sfC~dO0ZH7nMGVp zRyvWK>#x4P5yP%IVS|CoT+d9=ZVk?7lXJ}VCHJ8YvYHKIzz&}pu zp7>-EXKD&u9$R(W6h7{Hp0`A>9Wx*H((1h|cFX%lmy{PhYzbeUq-nH`_viLJ_ga(6 zc}pOJM9iZ^lz}@qz3~%B2W46I^}0>tJ+}EF3j2y^vBaL0(iuW`@X*e{ZxddY+wJB+bq$w$Ur2;zKP<5fuUHgti^VVX> zphSX{g1eFVYgKf#-iacocxk@v<>2(Q5UKbML936+^-kq|vOi&cJY1)YF2>v?+ce_i ze!X%5_DP4Rm)aL=!i2Tp`qQ4Sey^_dG{cl{+4!F3AhYVo&Y9?UorZ|IN~-Fu8OyxT zT}4&a&FlU3k~bRqt@n3h98wf}`uE&ZMQ3onno5ru9kH-v6-j!xR>ky+#dAC+S|vep z*AIZZaH2omeG2qG%4KPn8imIg0DTzAB{KCki7Rw0Q;Hi)F`^b1cu!t4sHEF0#X#a! zQh(nJQ4UhthcMcalC-6K0SUr`m!dAR`IQA%=+xEJOpJ7EW{Zp)Cx|50$JCda`5<_W ziUkarzp5=stlwmBkue<%#`qu69-QGd%6+_8Pi9)- zoo(ykAF{Ei=#?XAgpzE=nyE~PNCumfZW71@J!kz9TRq}mwJrPp< znpec+AdICi1*u(>+$K$={8y6XwMsv?+WFTxcE56&Lp2x!T^he0U`7dde@aSfY_QcX z<&wsGV)H=k%4sscFCxJTUj(8NhaoBA0l4Hf# zPB~83RFu0#Uwr4>F{i&_wu0}Mm*BXB#SyYs++1_Co(7E4zFG`(Y zB8V)8vZO4oqqp;G09;?NX=c^c%H`X^dr>!DV{I9>GXqVJy+RxOa0L?`L+QCieXs7)FeabiHDU~VZS#bbY_{c`5%zY$zPtlH>|~8Ar;?$7 zfbZAn=LV>)>&K`}w+&|aS-cAWAu)Tm&975^%MjN=F#&&KL%b(~ss+lphpU4E1)2U0 zDO{$Z=cR~?Qn_o@)=bYu>`G6-WO%($&3Hi7wppxS+u+f9QeAp(2X0x47U{DtNVgae z*%i&XT)oRype`~fcAD0!S7VnVbh%Y&s2?M7o*X+}hs+G7sB~ZRglNW}s|mVYc?vTrcJ)tr?Ro0%u{+^9C~BK1T05nOI0?~Z zXXjeVU^(2;3D5WzOAge8l?WB7$%BEja zXRAv}RMN2V%(cRAlBjKe;&`(4#@%&9kujyV<+ykt`)gHh8M2|~=Y4@XkB{?>xx%@C z=i5Oa*pXl7YfS;T6Ab8-UdwS>V(YPeAK8tq2TR1nA(LKLp9x>K`d=SBOVzhpw%U9n zh(*9FZdDIydy9eFr?L5+nt9fJ($Kjgal-llMk*B#H&7amR}r^v*$d%FPIYMLG4NVR zDA7OM5|0yTUI)n~K9eZFe<|V$e+ga>No~D3%tY9+w_dp<3A|~4Ul)OH_ZZ%nvc%3e z9M#lETIqM`k>gRNv3opeEYRq&9q}#Axs#OrCTQ2cA9U4RZBb0bTgqxknWS!ZNbV@e z0#z)q;2_s;cFC)3J8#n?t8<7-#7)%i!VfvLsU2YlX*4b|Jb5Gc#4WaQZh%6hFB@a< zOuz9^9RXP#FnSr5GM?Bw>S1t1?O5bF*B7w&^sqAXx^LG1avR=;%W*HV;Y^PuxigxA zyg=fxj|XV#x~Vze0k_(UAH>D9uluK6)pd~a)BLFac`~{>=e3#+e@Atd<%PI}Ir;}XV_@szzbMm&=T2n4v$e~G~P zXEBiCJIRpM%DPI~;rnJgb$zDQcp`51`d4oSVtkiP{HDo%i6N)Q4Em0QPmjIUbyXSM zZIk14eLPv)cuBxl0KI>xXT$h8cR{wl%6fFshthK)h<)(1%h1fz$Ks)$7ld6$)9J_N5WB{bj#@rX6qPlEy7mP2bPhvukVw?*JeFj%R47ICxv2 zs;_TJ+*eDJ{r*QJ8C%My*toTg;heC>9OIkE^Eb>hnMTb%DTKuf!U!nK8{Et$7(GTf znNVviC%%ZT$|JKMy4DzmK5t3*Di-YKn}ohGhm(aHBiJdN+ws{Ezr&~oo{>b5g?k_G zU&0VAEIH!vnpDjcAlCpy02PQ$tug&!!Q1@o`|mr&GwK+NfY?VQ>Rb_lNH?M}A;v$C>wDV&|5qAp1bd(+Qf8k0LWS@>(I{aawz*UTxpVHz6~>n_>7E zyN8xRg`058&+MGJa)QSZb-1ELtkI*9m_)q!dwPt-xlE22=QEbc`IfB=v2keO=$pOg z{OhwCD-b_E_HVQEqq}!1)m0SC73%V>&VmD(zwcVYaBR=oB6a^0+e}>^?}p2Q<67JqD5xVV~i*4Zt*L74LKDt=6Zny2wwG zwkmz-n>16kCn4d-A}`o8Jq#j?Zz3@iO||wc;F<03_c8lBtJe@fVf>+ zj-xx)Uq>tIze~ehz6nrQussql zqfkj?XHh@*Q(afrBprK9uhb`wF!=M&P{_Mt*{|A}W`myoDSA^U!}3(y?9~EH0(5Na zxV>u#?PAh*WjlMnK|I3;ZLEU&EAV-r~u-e4uszMx||+9KUnx8Ct`ITz5JV3W6fR++x8*HGsVbRPR!o8iyY zndA(Ab{gXv?e`Z_YHFKlURfS(>*eq0$SQ8j2MOd70M?ruC~wj8Xt+H>YN~x~Pc`)` zk?P$CE)N!DL2FSji~Sb~GdU%$*Hy^psC&$vbDn$AEwivgY+v-^%bVj^nKrkT^ie`y zx-5QiT)^f~%w^De_B^{tYMw^J{`82|-y^PCbenHbw3$;)l%xXp+*jWk=#dL)GM`OE z-2K#a7iqJch4FzXiUNJgG(Orn3rI&x3eY-Dt#N(vdDDt`>Q14wHZ%u@ZNEBBf4uu< znxye~Lf>yJolzxYYv8~mf&2<=;W8Ru5}&9MvQo86W4$Y@!|-9(+cdIqYnsPr_oa^9 zJ_)hJZX#|;g)$CAuLQo?-3TRXL=`uvfFI&G&%b7KV=3;1m-%5=nnp{AUv%5z3iQYe zuKEvYfkJmG^y@-;*%Qmo;R3De(4?8Q+#x8K`pf+hfSNTx&9N$-g6}rYN%`K(k`uLN z?~sK>#F(pU$9J53z@5K9fpO;2dcEyvTB<4D@1rzL^tHoE`9QTUcA?Tm{M zJXaa)z2Phr{U~c=IJAwKn3UFbQ*MA+j&nEPyS6eXPAU@NMSJ}Vx zBjT>Arz4`7Cevd~P5#{K$KbqIU`rBRjF(Al;jl;+l3U##peAO!KLGClX;n8@G?Fym zhI)iC$nj>!N)+PuRmB<$aT188*U*b9e#R0bJRNog7toEN zscpWXjADR8Kfqc80>J5-g(0|p<~K`Jh`KmFNgq)+V_p5R5VO6F6U^?%RG`DpjP`3$=0z`AA?z<>=>rua!6 z}{|^&vLj%p5msQg(lWq?lf{ZX!ibC4wj_482fxG1uIY+nmWsia1KF}HN*EE z^qDuEznG|PApUvz>}k(8{U8Sr55RP|=n;pGEyNBl_;2mf<3l*1W$s<+r~K~V<)2oI zjn?YR{Q79$Bgy3t`hsWG`F#VllJHHhWLh&oBBJQf0ExqT z2QdRJ-x$Si?Bc$nKrpfBbEMf|oa#c67Z8n4=NPUj5?D%cSl|ZX_4V?|D zG&P5r`RkNxr2BP~yi_j0c5MVenJSU7_%@*}fC@sNv2Fgs!ohPqkPtAIj>Fq$&6PaO>`mL_&4zf`qTVXgVDg1M3 z!pDz!?54^Fys&nlbU`)Ij`8>NncnSA@u{(`5`NRr7|w#184eO{29969etn6!Irj^$*O%I94;!EQ#iJ)~ z3JssLJ1(w9kMiRy?vw-CShCWAgl`og_4w_|cTuq^sEld|O)O)Uef{=ru6hJ}{b|T;#kL9csx48Ev#93`@6Iz0L6QBCrZ`-<_9XV z723zf$Az48TDrZZ6{t|z6gP2Mmm>UVQU9D+g z3g{$TAWfsE^x*(G93ayg>vw&JWsSgCWweVz^DkSq!x?19Nq&6mzDa9D=ndqkvtr;{ z{8cX?m*t>HJ$dX3gnln!Eq;ykk*~bgFgRHG@x+fgDqWT?#@uz=l#~V^@_r#F6GjhW zm&z*M$ta(43;(_P6q!NfRgr|1?N5*;w1-O`HVKP>R|nGJ-%;Q76IrI&DrfLkS2o7G z2Ndz@3f2Ljy^_h|mi7D0f&`OVl@5)7U+*J>6m3w>F0?xw=;ytTbd!hJvjib;H33P7 zj*KnkRMEL7qHcBPs~=_4ZJK|)7@fe+qXfiQ4JpR5kV~W(E1;tKjml-qg{1)v9j`c< zgbb&utm9oz9x}v;IRy*Z9X;l8oW@N*c&egny*w2NfGtVg56riwq_{wKL}dk{o0Sh6 zr8+5+X{Dl}u}i9_3OE9CROo39RQH&u0mmBE zWCYoa6jVhRTZat@htYsmZ`Fqs;F`pAC8N<>;uEE%{FPuFXj#CSNGGIK;-*Zu#zj^Q zJ(`u5KvfVEOFjsQZel%vRC-m+!|U6;x+L1?ak<{%s@4383hoSEl07ZnaU3+LHmxlr z5eI(P3v;Ay5N`Cr%$ttk`4nueb|z|zCwKh;SP19?%b16Qa%PZdhQ5%D zUmgmV1cC0i{ z&*Oe|M2K_}gRsubLG$5(1HW5R(dI%e4ya={p+ZI3&Igw^ZElOVJP?cI^S%&`TQ?pO z$j}dD9eB;T_RiBHrKx+WD|g1mS|E!@Z?$fx8-^*{Jpl$Nb>Y*uk;~j zbcpNr>_`hFdXpZEY$Q+>2FRPoqjhxau1aAm%vzO3kq8hG5n<=KoWkNKHMj1SdY-{bL5=1XR)wvs|YwiJy%^djrW#U zkFXSGyTb$V1o8LiaC{toRac&EQX}CGl)MBsg?7b2k$X0vqdFE3|6GvC+LL}ZIZ$0) z9YqHB;fsomMY4YulKt)F2@R0eKy^2tXJ@uD=Tv`qB|}2a|z5{;zgHdupKd z=??F0A$QFN-TQPW{TM_JKxq-|ylwC}x(W>`P*ebMe3{hlA^{;`e7Li}mq=d3zfI+4 zAX1z8lnn`CH=qLMT`Z|#%pcpGus#gIj||f>PV|hY%_LC01Rw}scxI4 zr0jM4a%h!(R;ueZ>%eVE_#u-hAh^F%Ms9mHJ~F84>aMp(Q9joqf4+&e0Ihd#V!F)^ zs{$wrp-~jM#U{`(VONF7F>duQuUkip88?X;nr$I75CKndI?)37OeHAX${*}Ez3pLm zh3?R>&fp3pX9T?S8+Th~ii}&ul~2tz#F?M?Y?WJ#f7RSk_4o3s7kQ*TH|yN7c@_bZ9Ksx*||s$S#v2DGXUfS0y|+}rL<3grbL z#&kcu>NUQ3!`^%}a(2^tb6h$%xzqeUwu^^@+82Uz$!o0ECifP8bvPI!+aH8UxmH;z z6TShTh{5G2tUnwO>8DRJ7P`H~lfeNMApd{yCi%d&}9PoK{lNiyyLUGLlL~AK#KFfM=cMUwOn^L&HWAo~tVj zd7o^pKjC)Evs}?d8jRcofCq|crCX7IRK5EiLBv8}O9kY{bl)(R$AVZ{SX^OM`@O(z zgsEW-waNJ!`x!`|%CEY`2$ln49mV6(PZMdjz%{g7>)bV5K+wjKYU%>(&=+94B!;XN z3+d2%&Vzzp2g`56F|bn`cN%)Hka>izG$GdyiF!oOj)1|-R?5~H3>nf+csUeJ`Z#vgLw0Topb(%*xQ!7`{#T*o!Fg}8v4&2O3Row-KBR6Cm# zy*Iz9_Zv1#T(8+zVgeVTLXTCmk=!Dj0%((X%)pu3;x!9ut4hbNtC|RbU?d3#f5kjq zh|g~GWRY$qL+OeY^r!`}cC597E|Rh2H)mZEkaE*5IK!%Yam#8%MboqVELGP_n`Q1) zq}T$Ur&3^^6-94qBhvk2dW`BtEVA-Ry#hKqpWt-}udm`V?WE1)3H$GN0SFG4nf$y9 zW-GNmk065;wu6`~mIJ?I3bE~FFBeq~9P|{6+rIPr5&}06sVvPOlZ(Frx}OX~P>54Y zxIc4xJt#!?T}PtXu}S zMm3A&V<_Pjz3jFLlclPU&-HD4Qb`oV*|seWL<;4;7eh6TwY41)rka+B zXWEXT_jWQ#!kT?f;hNFUktn2Ag`!`9?de`ro#q2Vm+uH`iK6_mvewqgl5}?54yl``J1!TdxeNPii@G=S+WH5VFDys=-MO?HJjv6S^%;N@i^m z42hE?#K_a#AB`NlGRN8esy-b0EUmQ8wZ?)}PwapmAEggV2)ngCI%xIE=m6Y}A^8R( zk)Tqe<_7Wy8Mj5m4Wxr2K<9>qgIkbj|OSlj0Km`?OMq;G}~%r!?WH!aDgrLG^?niNv#`E2h;p0SgFa`EK5tw zQhXHhJ3EryC6Uarxc(fT8Wmk;q$8erHj<~*|2d2jqN4T-X)FRI(E$BJFZmQ3ct$}d zBixHWbNZrXDTpt)+jMBK+J+Z)F~4yqul`5meO*I6a=Q7CiCN(xtDpJJi`DiPe;HOS zt`_D*bH|7tD6rV5A{~K0%9$u=Ac7$?@!8Wj-gUmbIy-am|c69U5riee5S^}*V|}(a->pq?2NxFihMPvSe(kWk81#DLd#@qgZ$NP zBLWFsVA=ZHcfV+Fg_Ic83vob9J}2$Wrn33I%w^>TkN=e?_}gjIs+ex=Y`LlYgu4$1 z9jDtYvX)TNxZ@J$sGj|dxqD+IW1(0a8gN@aLkXH7RJf^i-JJP+7ofy#5JA8X9b*O$ z67WH70mU?Iq9X1J?}{@U?ch*ksj8;?!r?!iQk#25udgDyAI#$4 zL!U&aY3mAUj|6{Q0CrbY8oC0(2Qznb?8U$NVap zc~`}$qlU!M%0rYmn#cUEMsV-vsibgsJPEkkkAPFOU9@}zlNWE!`U*XWwXA%Op_>(Y zkMz}EvvkM?)i#pZ6=;JhkXME`H#W8d(l)jr>&Oc+{s=W_BiNBFGfW)GNr94>__1Zf zH)O3;d4Nu&xcM>gz^8}BXX)Ev7}d61g}k6{W38hJXy>6 z>zYwkFmkL_8Sn)dz}PB+y$P~o6(gQ+-@c7PH77aPq?9gBqGj{|)%ER1<;T6+M0 zug5?E$SeU*e&fTJ+09 z$*E7j6oyrhikz8|+L_RyQw92SBqip13uGX7u=zGX$OPPqvk&!mkN`SJf7iD?`W^uo zMlqtnffk6yy*ueh@~LV74r2CVo-=Z(xiHC(gh3Gz5gI5~zp8mIZC-JSy4^ZBQdkDa4Q&!dPJ-kmqRHdkg59>UE$r$P9exQx~~o(=c;eCx=uoMxOscGsNJT0n!~} zvIpAPShn|bPLW7?CHs1*GfH`^Q2jt0emV;j2R6j-Q6La3c!1yz3GM`Uw*bK{ zxVyW%27@oIw$ZGoQuButHX3dqFILVX3?RM9|^JrJe znYgpm2yC|mC+qqZcz}*S4QOwt2S0S2{_ALjA#C%gZAgkkdLr(YN;I464x*O+nC%0t z7RKw^3Mjw<=m?^T>>ll$K>u7bz5^KMjwCYZtz4V9B>I+o>xIK%HKzw+!)%7DEDeW< z=wC`qAnkB6Z`!H2`T_ciDSo~!5naLf&mIj5&lYfaN+l{fS{}EG_b6jL9#4sz-9agD zug}fP6_BM9H6}>FW%*oz2o^tIm|*&MRbTHC*0&T^TVg_=*v~^pY&c$|yKHd)@Mk0m zi#`M3DPoRU`-ufGhLBby0VD;Wr}71ynpM-B&*fh`Z9<%B@XHSxiB+#Zk_Fhhv(+pv zEVPEmZ}ALcFnAL6?d$9Qg_k^=fZ+J8*06A5*%_0s!6XI)egsVNrH&% zxpFT5xibL(Y~YQKf8IkT{nLNP6yn_zQNjw1uxb)`=e2nAcf};UZbd~7?NzK7GHp0F z0qYolDPQ@h3PQ&IN~x;Wu+)?|R;#ufmbvKVtd=XVcBq=|%Mo5wr6iwcI${?%}nlr=%st{t}K35)eSk+ENMWZ*uR3k?b==2f3=-jNOBX4s- zQzF>p#SNzOO{i|AcC`^!CyZ{6Z90^0XN>6FCBfg0E&8GetjML4XAThmm)Ylm9jn79 zy%97}tv&bwaqFhdygMtIrcx<_{SAXcBsDFcx?*leh|GP9%(&?y^sAVX{dk+}b>AMh z;iH+llyoV&;B2$B#V9_L!O>@-2r!g?$VCANBukD9F3c+G6{Xl79{&cA92AeVe)m@P5P$x zKR+(M{~H;Q`#dE_|D>ovVX8{ThWHAt=frAd9{fF&@ zA>8VD@?YO&ti=-a!&xq47_CYst62^(aE3Kziunv5RaKOB(f^tqjnw_+&L4wIo>x*z zDnh%jM}%-q^7JU}_71g8pzVibQCcB1CpLWfcg`|Ex?44=aZv(YP?-2f>*Hp4MX-N_ zrNZ7%8GFG;aO*DN1f>BX9&ln|1;bu34~@DtZ08ajA4mg*)`Gd2ldwPIpQ%jES*VPM zMm#+zr7bl562Mh$O&w_&;yi4KkthFCG~NTe&LRHxh{8W4h3&J{igR*r!YU-twr zkS$^aWfVLqYkxTP8Hp}UBE&ZP22y9bKsITyr8G;a9DmnvqC+d67MUf9d?fwvzO<~{ zd-`kSjrjj6a2PQ3w7&%3y97P*&nbMffsOeq$@;0yd*Nqa?bgPzXTa(^8oXF6Ca^zT@cT4H% z%1i2XOx=3sx5Y<||1ewvu$FpgD>(E4^zncYLW!&4m4-dLOVt!24aGf;{4CMw@&q+k ze(Op+Z`(9!tFpw#l(MPn+4WCxhEyG=>SndkJcnO}&B4Pzo+}T;f81PLS%cDWsA%RG zW$=<36~T%pwpRvU;)8>}mdOM0=3+U6LNXOWQA~rW%3NRf)*Eq-9(Ijfek7VKYqjD2 zQ>sz}Aj<=yu}mzp=-tu2*Jw8h^xOc^a>r#qftBm+(dtIK zJd|izf%$Ps(`Nq1bCZ_pnlOJ?lNgGfOk7I%$tS#9`GL zED59UR&~+8Tx_tZMkiMLfk8tVc0aW6=jg~(xuC2M4u{Gz8?`Mdkm?b6LX^9f(sDfA zblI`Sc=UCt&aOAbYQDbbKSw)>48A+BD2aC$XNZ4!1}^oHi;eSb^2skIad7s5nlZv!q2oC#=3?bG<9KS-t@vr!@zeTs zOQ4i*iG3?;^XE6Q+aE)S4gRl`3<0l_JP#j$q=34z1T&D$WVOa+chEqz*9lF)N=K)e zu1c$9^~UmUa^3L(DaAs)cqIL(b+2>AqFXx++fj~l*fe-S zg+}LoXHKHj<+c3%n|797=24sVEXKE3Ei^UYhselTUpnLw`T#Jki6{22_-)f#tqc?n5qBoZ+nraAlp2fU>E4AB& zv(tlf%RYdV1}(Pp@XE%Ik`1~BVYDsKT}VEHO>%?o-Gpqysw23h43FXRhm!>Yy{gXG zO8-dqK88^qndT?liSd?;E&1!0n1qpw&F+}chML$Chl1KHQ=@6ig4y^~Xepox;viG8 zvR&1#ztj2y>UF?;#sJUBL)^0!bWoHGq8)HvWR@5eGI5u1?)uElUK3aE91<_6GYl}~{TH$0LI@=Hoq(s15k zsmcxix7@qx(-A`^IRXOo_zr-GUF5xTa*7cc@^iA9FPPi}m9^gKr9LB-(6e|}&>68&~@DC^2eM2RZyK2>T{f5W2qe|19IkKtsToZjpk2B`}`v ztKm$Qe|QNaG=X~sC=aI2ibzg$y~gSFg)=})VHrA_d$v`ieX};(rqGt(z%W4sUPPel z0~Q-%`{c4@|GgsK-qiFQ`bl!ZJc+6a4vz6y>V425crIiq-)*v!m`!3Nwc4Dk7b`tV z>0&~wZv*sBJmpCW!2cVM9pHn`NH5hz0(6rM;HpOYF24(5d!@c4IEd(+EL0i-^e~7E z8nf}9lHtDn$z*@E=U zTLBTed<7`RrbS6T;h4-?BmQZBs=eW98#;iwCZbgy?C`+$f=^Bq!?7|C9=TEP{bH2C zUE#^^IHmBgRX5X7VEL0%}sL- zCKnUkt9C<-WH!_FR@w?CycodVJLn6`B)z?comMM%2Z0Zk5`4boChOt#BM)}LqPilT z8Qm@J+l`V_ce8T~WaiD`JZtRs?XOoB`J=n8KmVu~|472Bco&+kz6S?Mbm@WEVeJk= zavDCntM)hmkafy(0ca)(49NiWNxr%*cnd zP%k>-ZxJ9lMOx;lA}QUv+Pj|fp@gN4fJ6k>JP_YKW)To{B+={mCh>Z;g&|=x4}^bV z=sFK+hC;p{YzQx`RdAKyCYU#5}9X`{`ubo1@K`3uyZ(x zEMWfn`FDpj+v<*5``gno+WFPPc2u*0EYEez^%xU09-z;^aq!SOQ?+1K1kH@>=Kid_ z=yV4*BD^+QusD^ny1%2hUv$Bv-H-V1CY#ZH0{{fN;o(%C;q_i=ev@m%;ksM#;k=od z{G@NeZYXxUY#~6u7y^SKLjbRW=0;;UE0K7d;ZJ|9ZoZcOz$o_R{fq$WcD(tD0fO-V zkepSp&XZZAhX9Ai1Y)=w@7LUb)XF_FtE_ENQ{D|-AF`&V$hV_wh8>$+Lfe?z4|$NzAC+)YSRH)f}pkZ<_Q?Kko!*q@Xh zSI#C^{5sg^OKvWQh)fFM;S7w3K}_=M6ql-*Jxw4gD{3|ju59SPr!xg~_TNTra^``* z78>QDo8S$3eehiQ5>{)*Su%Jk>iZT`7<+x-9X>kFw0$Qk)QMx|N!O{a_N=iukPS(W_o3a#txyW6JZ~ zJt66Z;GT&1gF#yoo1%t0;vz3pRtar@0!GUpb@7B>CI#)z0|1QVM|vCWBry60{+}o_ z}2zGp^ zYrF@{mYm&AR_ca+T4IPxXniP{vyM_RNnYF^%R# z@f-n%fqiDV$tyIl5SuG%u+YJ0>9i%L%Gk4`ey0&L@+ z(k}MDnjtR()Ql_eY&T>vCLd+CGP_kAHhbsf=Ebr$JjVr{GrE_y-@Rd&^^yz5SE>4G z?C&qvdO9Qw+wGj&_r(v-m`^2SCcrDJ1QIW(uf709w5lfoQb55szp*cjOh4xA@R`B} zs4D;s=l~>Hdl?K|Sey_RcK;4CdsKcv84YB*Sl~?3wgt*TEV5lZHDmrr;(SS>>SN!N z$m_Ikkss1`dKm&v{RS*H<|bO<&F%ZLf$0RKH^GEAwSAyMPP80KTfxO@tk9vvT1Q9A zP2{R#K(r5PZ3ze6O^IFXs2P!>+B2hDw!hxxSE~8S;IKb|$bd`}0MO?zMt|_JlmuCVtW>wxnY6mB z;y(sflx#({6ecHe6FX`@8k;S$Uk4W%u2kGv5suf(TF_8f>8U9>0GYsug{YHQ*5pc_ ze3B@kGx?L`&BH|>j#We9-Qt4>2PMfSF%corHpPU*w8K|ZHB@F(jr5kCUzy0mTciy$ z@1*-MZ%MY}s79W$(c=p3wNZILeKFZ=y9hCtP}#7dBO;LAu%2%Y6QjbPo^Ah`k^{3s zKyjXq#X>k?06XI1ndPz*V3f0OHf5yS4aq~fKo2_tf%bjiicG71E?wJ7!wj)*E*0=r zk!Ls-h>)t-US zlB_~OcW$HJ*EXE^{J5ioDJ$TZn?Yo0!tXtHq6r9)>qcv#+#+A1zVa<28E5Syl{!V? z9^_c}@rX%mesXmrSJUI)wCG}lTj_vlS>9Dx92&(K2LZ{^9mdDA=JQD5(UkQU!+ReY ztE5XMFik3Fo$Q7lZy_J;y}jYDbf0vd{(Msy0hkQ}Lrl`MgxuO0m9sYNTkWpQ8Nd4P zCS0uzm*b>nk$rqJPzz4mMb@BGji&uiDm_1IlIE1g(m9{<4+0CmN~QxZ@*f_b#V|}} z6_c+1-#X;TB(zlXD%->R@z;masof#3Uz(Bj!^NjZiJpI0GOPB@@lh_k-?!$Q*z|^_>qkqxT~U~mxYk&<#68M@%!<*@snflY6||XGYGr>N$QfBwh%^zCJu9l{QiKYCI%oFFxq7pkwdq_eiODo^1u(Rjq}l=ymTPM%9xV z{zHTWEpc0#zYf%1Ws(m0nljdGE+oig zqKo0hclxDtt3eBn}|cDoGqjTL^`FFaLQ zQonVp#*B;N5TWR_Z10u)hb!EbTcR(GGS(EwR)I@P>h1L}H2cRR&rLDE1EOX>$%FW> zF(7w>OlJV~_v%RwBa0#UXpdcG_c;#2C5v$sx{0%X$txBjA5Ukj!!uxpD=Tg2{61Bv zp(~K@ypq%4`Z=lkz(j#sr(3?d2W3#=X1#c_XBArd>=kmoz@eZzT@wTMluaH6Pt-YK zf?E1m#tL#A(Bk9*o^IsQIsDq7z2NF}kD-=29g7)TkB!oi!}vg0Gk3F$pYb6Jz^>mg zGde6>pKe}Jm5!?hodT8JYw~O2zF$~6vsJRAhDy`urF&2K`?1^iqd=YtCrXhVEFYw`9E^{1AzWGz!>Yj`HTRQfK}}4Xw4~fb?p+N z$|Z8R%0%OAC-z4l(oiZPVOuy#HllB3Ghbs&$ciId2Q-FF6|CAT9ma0zyrSiO`(#-) z?@x9VV&&qKS+K*uXEmP}hww9_i39GcIyv3V{)Q%MOkjimbV0v>Is)+_j~%#q?-h<^ z_IQNbB{j4Fl|}tBoV1^vn3e-0>kw$)Vn!@-KH8>)g)%dr=_d6&=#wNp;F>v@mR6XU zu7_thAK}8KR4~~xEdnUivUw-egJpAh!ktSaIp0Y_a@zeua@rd9G~{2(`k?__a_cJ3 z0mdF1oMzM2B2Cjb9tHijGIOvn;D@<>3^vE|4|3|c=nOo&ycAPGVVqs4TR$#}bYC;Y zaQ`F*Bfu0p!euH326>ZN(Qdp6UtS7JD@H3`x&q)wuXcw=foB!P9%VDC%~+N>y9I=P(oPFz zQ!$dp?aT-X6OC3d02&7r`J$OE*3y%}UR*Q=#Jk(NwuLe=KVfVT`R$n(t)*QqHe=A% z`oFtjj{AP6wsuyRO^GJy8$Elu7O!g*54kt-Ykjvl0ST zBY>IJ-EmcZHu@>+^=*Fhe*D2KV~@(LD9JyZ)%#e(G#jKHmFWO#>*9*X{pwrg3j1dk ziRfRGxttl9WX79Xq_eOTTc*PiCOi>~jFeu0#6h%|{`fHlot?X8(Pfj&v4o7oHw=4f4#%Ho7nG@pr8w3vxB4l1LZi__nz zo^Y#9*}@FXwwZ8jcW+50wFX&{d7b3)PqXDK zqU60+z}D#Af?gC0s`sgZ!_IF}4#}u`81(FN6RYlaBUFY)0G@KkR&@i+UMA}l+TJy|#3!z9i zPWO6qsju&=U&R|k^}k9cPnh5_PRist_*RC>#qD|%d{6tx_`kGq3gk!&BT;FX+{lhs zN55CIW94Q~_R1fI6#1-M!ZO7i=8Dp!-?zjBZVUbEYy6=Y*&})+RPyCkl!mI%8$}qu z$yCpz2#SQ;$9Dc0`I?T?^jEn$2;X&p`>5RO)y!#5zp==JiPHMK^*$NUVf0|&D}UP* zjWwq;CpCrp1_|ie2%>nN4*WTtPDw*jax)G7{7=wK4a_8UT&A!gIU+i)YKyDxGKJRD zLa4t)6ui>dGm!*m%e%~sRn{<@avKv%HZW5fqcIZqDh>u?X-lb!;&DuBI}Tq{mA6cZ z<%%(X1v<&v-vfi9GlgZ;pR`6Es;9a$pMl+Ia;YKCw=t)->6gnWuaTwdSf|}TpUq|X z-gfD{Y~0#rW+#072vSx=7l748kne&j;C`W6sVi(*_Z!OM{q^2y`;ck&j3@|K7hv)a zW0Sd$*Ff9G)t_G9@75sOB8yv|y=t6)-+Qc|E=1ltug6B`!ovDc`@cwjCG&vS%!E?= zI`Kn*x8t3_SWvx-z!^56sy&M+-@nHOwg0m1{F#{U%2IMof4Ht>*TZvsg(;b{Nx3QJ zEbgrJDNUc*XpCnaYw$W{pWO)A3wZx>jbz6orWJ)aRuDlOqA?8=;HZQ?;beR|v6Tst zA1Hi`AtYJL+3u;wJ)|s{+5bXF;Xw`y^Hd+AUtM!oq6`$v7DA@j+Z>lE1<}r*Q)&5X zGX*AIQauNls_Bf7c*7ns8IDvuGIRzVUg$zxI=^mVwg(T{+UfdQaNo`-+<9aa`oiLG z2*xGhg0vYpZ?axb3XjvguhWGJHsNP2*D_e_wz$9l6 zw?B1QVWYud^*{ThO6D2NDn2Qmn|efdwkh9_!KQ(|_+g0=rogn^OiA83GC9j63cWrZ zmk%#gj#`mD%oOk#4DY-Rx4%eQi!p3N%ceyWwB0T9rBh6`v=iV~N>6ZwYrR7>&6fOH^0jLAFC% zt*pY_W1PXP$X?iv;pl(P&~oTHa)xy8W{M@;l01h!D(gAC~H~QY?J_ zCho;3esJ_JjwNr-H9V&ko#IFSl}y|c(~5k)nO~hBgZb`P31?vIeCjH9SbOBZ48zX}VyT(qVx5V5Lrw*NybXXdyGxjp|cC%m=dwxR7A-35~*}0Xda&A;=)^ zh2w5i2@AD${`~PIgW4N&cm0JJ-SkJau zdF5+j9c5Yye(&a72}SYgSP#{mzO3Awb(fO|c}!*Y6L|JVr6g-_=S~bd$ko>hiR5Ms zXOmz(74y^v*m`g(Tu5=j4`nzgXz>=nc;VY#U zcJ`QaZ8Tc|Rb+1c@p}I?>NB|q7z1`sj}zp>0tG6ZEZ)68f)H4b_{?6OOP2_Ip#iHY zQ|%8L&N@q`O7Kpb>p(TSUxTH3VW!=+SSIim&g#z8Ed8EFzq=;&?uN3YzPDcJ%e9J) zrE{xWVKrDb9&1@`Qd4;c+0b`+oU-0eq#G0@|Cxpjg&DDV1m?4Nv$XLwmQvmgHtolW zIoox@VHk_|mMgl55hk2kX;B_0dR4$GtMj7Nf6+ecs2e0RLF15F{LvWeG7R;c&m|1dm}YrsUlW#aa{Q-Og{F2v2wZGQgHUlGA4g$iJ4`BW>-?{Er?8x0W zFy8?qlEeTam5*=N&S>f?D#mBziCiaZky657pY{aiZlkiGVjj7m-p zCUXn`-DG;9&&OaDUP4=`1HO}Ae!IQBdMA<+64dQZ>pYAGM|c?PHIA(ml!Vj}I77PA z0&{1y4rZMzsii5b$2N*TdE?^Hj6X-PSt`h7+)c^E4?hfr1R$01hH7i!hwtG~$ zKEf?FyCv-BqkVBo6unponFg6qbnd9xjCd8&{i^*7I2>Ugw?7rPS6%iMUjwEdS{qZr zX3xNQolc9v2OZg}FYF3% zw3_UTyw=R-N-nn}LVj6}0z2fRu6}0Vo8UUzJUn3ul-9D6N*ygYkRwRCgrMYYP7EY( zY311cDMAQjY+63T8T5-xIQStz?e?lmrBqS@-DQ;FF*kLwaoITTF@`ULh|hJ9(47tG z_0sP}&HJ*6WWnGK@IcQlV*Ph<Ua!iMeSU25Ca;Z6 zeGA>D8=KlW@q1IZ9X-M&uWNYCB_{*RmSOtJk^!Np6s*3_9-K~tTB~E}>}Flt@`J)u zPNg@0@yq`(709?{i$41ePq%3{>%Y^Yf1@;Xv|8S*Z`2!RRW1EAnYG>qS3!frHkgb~ zmAB(wxfi1GL#IY5s@{BIC*if5qf}Y+V67D}$EWUt<9(WpqJCt`c$6wJuU6UwN4p0t zZ3w5-u+z3228~>*!sDX9{r$OJodaLK3+Xe+CE)aw`wH+jvVtmpwBgzrNnsn0 z1Q{hfdqgIccoc!DHBH&AZ&CbgM3-n}P%xGlnO?HOz(tsy8JY6~ zYV(%SV_|AL$KYRljlNm_z6J;5UhuYN@8Ob=TA-T*B)P1+R(t20m5Cm9KaG zK?C{1%JM15T|~}~dWEa7{dKwhcGz>DbG`Bj;I3=AJ-<7ZBe`#U@MN#=vDG{0Z@+{j zZrGed!NsT&Xj4?%at(0F9@I#@FBQE+tZN?kn#~23q|7`WA&=A{fdGLn{focv zB>~V$!eXF!_kN_4xVVH#|l-B8p8)a;0Ub?Bzrj!!;>HmUaULmMBX{=FcAKql%=LkV^XhN97YRDntTiHnO)kQ*Brcufme+Fn02~ylzTKpsW~XMu1~ESSKnT1 zHM5}?>g;#si&iDG&}3i#epA3}A=mI4(4EQe_mX>Y8z4-3u!JF7xS<9ujC>aN^W#{t z3701IA?`RMs!adANyRLBm%|Uo&8~pD-oHV;5`Yv5JR8QVekEqYIyMY*Lb;;-7ncf! zmTSeQZBjl6(&%rHU(FeJC2Uf~DZH&@H%{5x4ks4C>MKD*qC20~rzLAz$=kSMI)b^# zUtd^^n(PmDN52(K1bGGrgkjPiX(TAH^gb!|JJF3VmRc{zWQ91F{2r=$yX-u;9 zH^(8BPNQ z+8TIjw9{XDrEXKIR;GEfe&2S#NTe~~+tml#^R!Zt3I#mx2k>+1SrY&Xu5qRKDk8qcaB%$tL~ zkdGD<+z+4dSbu&*!b4pR2*vqgZF^f<4vWOCRc{-oeeXS%6oO7$BxVZ%`ABPN;ZNBB zOcP*$j~90?9HZH9vO2F+L0&k0od0xYY`GTk+}epRDL{fJkmLip zX*Eu8xRg0h=$fr-0#@@xuRE2edRjKr7A(yc=gLn6JS%H+NLX7Tfxs%w5a90q;)vX- z@ugnK{HI6^qA#t?a}+_`dE3e3BWD7W+kxCa(%CDDu^+ZYP%V?I;{vg zBL-$gHL0;aT?PaxjbvCCH#Rz^R7J6r2O_mg6D?Ia5LsH&>2#mN`q!qEf6(!3XK!fR zd~~DXG`*97077C^(mM>Ana=7i-VhSs>%|6V5?E4w33|CezPvz^^V`@nXrNoRT5V#{ z;4;YW8-;~~!?BMH!fmiRU24;e`~_1o+eLetX#L<7Mmv9cnqvqGy%;f-LZ&)N4tG92H~#s zwB}n}rzHnh>$9#z16{H%MQHFYaBz5@8FZf8B3V_(l8{*$m~1eAgq4t5|-okM7!&QBJ}f&XZEwJL=?vzK}4o|0a!shSS) zO)Lc)ReaWqLxjnyr#F)Kl;*pWIs|Z5d?f{p?viY8KnY{wJH%(!i0wW#Re_FDQ~zn7 z430K-v`>kt$1n4jtTUx`yK5!e7H;%2_Y=6(%M%UH8>IM_E2h$VACY3OaM*6Q6V*>h z5(Q`B@)$|-CxS7!X6qKf{y<{jTMP89i}pw)l&wl7{yb>GKodvF(%mICFztbVx)qAJ zMMqYUnGia)NL_LV6G~xCM{${MLh$+dJ65NM+y1^w(`nUUuz}zLA(l)se!)pZL-j;9^}9}xN+;YF%5KGGgd2SW z61TvQ)@rw6_uJi!A!Y5yqLPJr!TMAApYBSLhlU5W#CKxXbxc(Pz2nttMu%rKp4HYt z@S*gc<$a>DmnbTPM9FEAq-E91)=^tlA0QDwfZF>S5#Y>9FaKVr=D>77Z0!wigslWO zp8`tPnkryVh1rQnd9o1=s+~BBLs(eYS8-AvrGoh)ks&=Sz8=h*Z45oEl`P-w{*;8h zQKy}W4K4yf1E4?yQ|LHQOP~Q9>AF-ksTS>L42c&%Mf_^~l4R37Bakw{;|+Oi5THS$4n6d+{}^L^$Cc*Ymb zMw;z>>$ZXU3(#>wWC;mcafj80Ll$}>qIvTU);AYA#%Sm?OB7kSu$ zUg;LJ56b$@?P_OGZjlbK%KXzIya!L$LRbOO7$l_(e(e^C%f5xUn`D$;sYem5(TCY~ zIevvn$3-#hWOW~N!gvs+vW22d6=R8sjER!+QKLWG&S*DbIDQ~dkOiLKS}P)m1;=YE z-R>Um3_cjgs1<o8{MNF^I>xI5t1C$WXSrG6M&rVo$$}1n)#AspD6cbV?1R+X&`LgL4 z!$4FF=PRbXcA>6pm~?Riw{y&*)W&9`li~H@EJwYZU(lSyaF0Jh+bgt-Q-aJ(l*%t% zHQkL+LnW*eF0%+u#QEVyMIEaX&8NMbApP#j4@tp+dX|LX4Xj)8 z{zF^9oneW4caf9O;Xq46OhTf*mPy)|j&Nb8L3Qnw;^FKrG)}vMrVmZ&hu0~k~y8-J=;T@OaY(Q%u6vFtwq6!FACC7tCE(9p>eHZW z>;buv9O%N=|02YZcgwK;4AzqIR95qUnZcq zaET$OHMBgQ1t}DNb}VH>Rbp2kp}0GsdFpGaJ$y(j7|%3EOoz*zY=ayF=*BbiXQXz_&hj1rprY3xSyP z0cOzMI`)3oLM`;;V-3X_!IOZ-tO0)d8|$$z82cwRm#V%J+MryPTu3>o=x6vD1oM5A zO5HS}SMR4u^XiG8gDsp4;{(ObPpfgZ$8$7TEJv(V+f$`2X0rEMHEM{08VohA5XfxE zhx_9hY#7LF{A^+k`9wgIwUGW_Q>Fkjfli}P_PJji0v6S~VK6@clIM9x6pib82Hg$N zLG5n!hSgHD0Q$hVJjsNX4OB<)V!2h@;-tfV7Kgz-N@_5$ zut>}Ln+Ew|w|{oO|_uMn;9 z6=DH`^rr*ANvZ%l4r>&4kEa@Ht(FEQ4m8FvFn{S5vMili8%cp_7MkiZDp5&@(lp?G zG;9Ch{H7{Sh}Xl%*rD6$9gpa|@D7mfijp%Moz{T7`6__Uy>rd;9UvMivpg@uv}?BM zfcnX3IPxWoL~l0Gp~~{sRQ2}EmR-$RWv)!)TeH&%GkBHdE+ra)rNDhtTydV5@NYEw z1(I>dPyV5OHtwZ0Gj!E<%Z_Hx55IG&Jmco0(AbLCHHp;O%>QsNI}KfkZ(F1StGTf# zBqA!fyjsqiP^U$RA{R zUu#O#YAGcki9FtI(7#b(9kYXh4U0zQtO6I#2T| z2tf_U)3e*O%Xm&r<#3PyhEYZErMttmX7kkW@hN4R%}@I~V_3z;+&2?~j%{TKXH2nt z9%UvCb3j5*nvc&R_n8y%?#i##v`M!rCfX3<&ks$pe>5BofXB=QNHSk`R->`h%IEzx zxAR($A72`9;Jfy62wn?8vlZIGJDEhjik-r%f#Ff6tPhvjq22yr-%x2z>6SlXR*O+t zI#jXOjl(~K+^7G~j&YvAtcD7K>Zpu5v4OKsica#+VRKkkPZP1HZB2z*DV7fo2 z%k}C?C3eHJR=b3NruYoPCdkfU01=|0Oa&F2_+vbFGu?-RkMqpAf;)`=%6$`RW`+1X zRkzJ=K2#X}zYXFAR&yOonFkrb>i&c4Zid`SJULLPK;GrX1dy$CG^eF`h zm2BW4hyrn{+%yYw#HR3=EJ%QOCKwrpK@%gB#vz`C3UnTP)IH~CBzC+ZG<5mX z%j&kKQB(!>(R2w$E#Oxcf8$sa#9T5uOMD!E>(djhF^Jx_Fem{r$C$d>Z&wMU#M@)N zAso2PcJ6?giUk8i$v|H;s1EGK2Lx7h{xvykv)k$mS@|F8i?_Kj& z7wAcbC?360t=8XOaxm?!#C-)fi=_Ca5sF5$U`7=mUVng0pIFbNx!+f!)EVIIsqux^ zBpVio!qW5l^!$;yFAnzX{V?NAybUmi5=~1{f5Y7M-LC@%55E-qs)M~#oVGQlll8<8 z@|x=p&iTr4X?V;?!-(CanC;rJ1zlb3)~v&j6n^uxV8-i|$8UN(8KHQj!vVNa4|Yd` zl4cq+@Td+ssbs0xZQp;XOC1MzP(CBX-r^_a<*L7xAShO$q^rsd@DxP~Rnt8E z2r+4Qe;WJMmN>kD#7BzUyPYP)e=98S=^kc1uzQ_sRbheDH^M-Suo-Yt?l7Ur?px)~ zc)DZLs1d$nZ6`-)gP$R$7?(*A>KJXdiP+iQecbv;Tu@n@-zib88wHmf+&JYQc20V( zAAZd8+oKjP)sxbiytu=MB?w?H2+?4fl@@>sgI3PkF9jh@>OFX(myT;Vj9l*zRZt6? zOs++%MB#%$v7s?t;r&rSL329(Y>9eUaiT+B5Bx0_yEoY+r*`OYtP2G z_p8V;Mj9{4d)_j#gW|Kc6E`yTz<1zOHE>3bTdSHDH;Ig>k%v&>B5ok9QD;GLYsl4kvk(^#2}!wVNvU`0lE_&Xm+$nw zl35|N6_8Sb31qRVX;A-Yo z7ui>T#0aq?C}GTT*!HU-k*~HYa$&8Ro6-2t7b8f>b>2tw z)tkHId#4K{`qBtQFEZ+g-2Vu!*k*&*kYtil0{GM_oN!D<_1r{1=%U`vN&L^4F z@FB_AdSL|Bk;k7o91sxDKM?0D$pLwx^qHvjd9eT7rBDfl9LT4+NC2mG(+FsrK`rKt zcqV%n1(c> z=_*gi!2GKuH4rR;t|VFMr>%_ET7`TR%`7z~YsSa^x=kEcpV8v*kLJ~BwL#r{jY8YM zEj8T^W&*Ph`^VBz8u}T4KUg0V`14Pi(z$SesQpB=fuSh2Yds0A`B6bU(E=KlZvkYO zCadOTTy6q~_BsD6p$aiE6md7^S2d`|H-@Wd{Q#O(N#mZ%`Ox)*TD?`plm-_`WfMIR z1jdJWiIl$6kW2?ohVLVawNeV%@kV~^N(Vd3;O^iYDuuV=G@<2Ng=bu9lM2K-(=@d; zsh?wICN#U_#>()|E+M#wF_W(wuji(-)lL?Tx}H|Fodn*n)$R(UGGrZ)Vb#z8t~Bihy&=Q<9n zGtd9R?Q3j}&GC@g^xWB$Ma|Mz*pH|K za1a{kG*q-Cvc5n@n1*G(B`NyMoa70u-~RwFn-Trq>ioN2j8Dc=U(u+xJCUDES8+1U zDyh?Ce#nlRcz0Dt^VwOLNb6+-FEO){nY-^j+4{bx=t|USz`ZVgRBQmA@#KlJm3JA%%lKM?P>K(DTqmSrp6@L<4J4M-9 z)L+M(xA6`403IuMk(HMHB<1Xi?3?S@AD}kul7DPc1Qf* z|4(~g9aYu#g)1c`AqYsPbW3-Klyn_BM7q0?PC-ISx;qcuoq}{rcS+aV-0S^ax#Ru+ z{&|iw7@O^3@3rQdYpuEF{N^{^J2U4eXy2Z6LvbjqAxU6K zI^e(f`a;gMxXFnaa+pQbF4daV?v3-PvVnoCNL^vgwI|Pz~Y)}KL4fQ3G{I=|t zlIs;d*DJNUg*m6|v%3=w9rWy@RtR*`X3G46s$Y^$^XW6+^(meA`lT@Xe*{r=^0KoA z;g}%|o7!$Ex$B+Inw9q5T`VyGmdH>>VYec&&mJ)l!{?of{s7E}zg|iwEzkuCEz-%n zTIV_u1Wy^1$iu+9RpMBlB~n1D53B!t5{E);IGF=m`C|DVDsC#@PP`?I2G=T*t^Ddr zR#$Y436n+2;2(iU41%MuKRG#}CHyG6_v#x>O%;S6BqEx? z<(A{Yk8R4&3bxH^Dh%Vzw-$91)y?n4MF)m0=8Tkyyv|P66_mHXnz5B=S{d-#SM;V7 z>__5r8*e(wZbA?*H)>hGz@$}MJ{6b+EO4!tbKiK~*r*9hoPd)>uqjOeBnl8q!4U;c zA@b8|e|cygV=II{?d?KWkHKh)h(HIPJp;Rs*89Fu)6FiSpgMQa6Wde6^Lb8Yhm99@ zryA>>GM&sn>%v?xzi{Wsor*@FbE9%*S`pF+2O@^}pD zYmsb#2FQF`7q1ms4>(Rvw$Qva>_rX5#K7nS&PzY?l;3pxN`4KrK3WQJ#nti5;QTeO zfL#^I=jYF#lu|yGjJjSxHsA9|J0Pn}WpiUFX{=b2eS5aLkO*)uI7so^XY_XVO^hj2 z0;xl9HCyCjNH58|=C4kxq^tL4s>e@~otZ*I5K`D&uE?LCA1;{P*kaK1?#@)^?#p`) z1jwkUqSIOwMZj+Fs+N|oaw2X>T3VI>^wA7<6Cu9Wfy!a&w-6Rs?PlcNS%fbwVwS|Z zX931(zs3UwOr0{02wod>3x7_hZp~(wDS(qicA=Bx?EA-=YO^@UU%h%} zP(M4Xxld~5vVN+F4ynlNxln|br3uCk%Im?btj^C<)6hWE>*eXF2m8Yn7+&VdJG!TB z<)y5aXr*G9oNk!VL>Nt;t|mrcw85uXAG0qylO}f>0Hy&sTCbJ9hsq-m>#vW5B4k1> zv-NUoLZ;uFY$iP*4qRQ}0aO8r8gbuv8|Nvx&_sl3`<<^7QQ;UW5S6M%we9D%xB_zj zI^4!sGM9}|p>iKTd|+1LQY~rNCk$!UaNIrb<%+PMFjEcw~HTwS&0u zBqeTvP7%=1a$Js3M&Yn<+hR>nVIudWh}06;F(o97y07QmN0pI6M0VyuA0J9=WqMg;h{n3khrd7Jlw#Vq|6?e{fRT$(an3_>lHZ}r#pSTabwxqWA2N}QulS5 z^h%3qJ%A-oU*)n_oDc17N-(f0hf@gXjXOIQN&d4h2tPZuK?N$byqsgutdX9d2RPFR z15pTTC@~3J-|1>PNPg(ldd;iW6%Y`C&jm;Ra5%FvBwy#U8c?L3UKp7l1omiTUs+NY zm%dDJ4i3V{z*^_}z8H)z_v~Y895$fM89?7WW1tAg{j$?RB$- zAEWUR|8cr{&nMfsnI$w6<7eoZsQvAOQ4 zEr|D<7{NuQ?wAI6M3lH=z9K7wM8fAA6hUlG@k4?%Ne)T8buX$>c~fa0{GqB=unXm6 zB$Y37_3LJJ<~B}wc_bdkw2FR58^CrzTb$1iI7*CUc#b>KnZ>%WRV+I$Z2n$5i8d8J ze!Wj!MG=cFDb%KGs&|sjgS|}o%iZ(4o4K+n(n`88WnOOE9~7J`x><{D>>KOY*&upw zTBY%j>O(s-P^(`qcST%6_Q3*)_CFHOy68)`&#SyIl_og9XY9|SlvszC;q_@8BEkJae zj=+r#bV^~>+TQIjQz z3^7LF4tgs@g`YI;?`{A;;ZVVzclAYMM$s?JTD@;nh5>)ZK>BJ=^l}L1RuOh)g3jq< zU@V$IPeubkE(S9nAutR^Ma#}m!W&Zhbk}DbbF*Q)wsD&OmW&A%Bn%9U?UKjE#127W z2A%pQe5%G*?5LyVd4DS0H+&~9KpH?!kq4VJBpH#AD$63w-v$xzQi4hyxW756%4OXwK0Qi~!6^0K^0!!omco zwdxgY3Q+Y?4IjgNUuA$DxU!T`T<*6>KZ+BLgT|O;g0dH2HoYZ?WB_9{tIvO#@$Uyb z;>8U^q;RxGE4E8k>#7_dBhPop%UA!{#vyQ74R1ctn^4ssna4qE1OW{|^!ZTxPdoRa zm!lsY8L>5?@L3H<{pUA+o8pjtK!`TRJi|QlcQYkgDW2K*MQZ2FF^{5xKrlls(qT~o zDyV=R9x~7y^Lu!Fevx}~vZJDJqjHpz8rNud?dXDJ-lktslT2FyRt%isFxKDw z_J&RbjAKm9Wqk;lMw230$d9s*^H1GDS-DzCRTcjHar&9`0t`0ru?EDyhZ|^UUTEv1 z&O|#D?of|q@zj4~g(swm5vW8r0SFz1JTP@=W9R4b`uh5+Jv@b~)q?(MxHnKYr--D;#;QfY-5e)_p}-~f2_t%hMT5wZqksQ}2CUCrPh`K(YR_7fW%x_Z zs^O}Ln@=CUE>2Ezx)FWyg zy4|-U#j?>pereQ0trvXWv5jQGuHu4_q^6W0_Cz(*C0gM_m-GF{+k4t7kb;F9q2~}n zu;U4&%_Qc^`xT};Gum1HongQv>t%+Nm0qs$J?`%}{r-@hQSq)In!8KP)*(d3Q@dns zn~$ONc^*2;>%h>dH8y&&Cws`>t;7~4qBI2I-Dt+5vP>w9Hiz5O_9`BKo)?XwQKpSm zRq8*(ttHbDRm8<$M`aciL=R(!q4bwg+$yL4ZM*$#SY&ZRP#7{wWA)r`6r1*qjKmY9 z%;xO9Ao_w(R&7SAI?!J|g7DqsU8jug8}`guUTl3+usWH#P^*SLxkc zPsdIWn&@?MRNjy5k=YH{I7+jPQ-P(|!T@sMHKe}`Gi3$RlYRgmOdC4F`aR}2d)f1y z4@jI2zbppc?W*bfgAF2;Iik9ize6&<2IAPi*YU?TnUgH5i<%a(;z%Wp7rtbC&#?$j zJdwfGFdy3(vn6`k8X?F6LeowWgd54SkGN8Jg)+V}A{d!nKvoRXam0viX-}&Doo0Q zA^atuHWy$HepQB(Xo{O(gMAbHZGz!p#A-dCf)GQ^B-!D)J~^$)C`td`d=tZQH|ZOu z=Hz*tm5EooNOWvS-6IH3AN3VFSu~3{Gq4q2!=l}R*o4TPJc1Bc@z z`T!&7GRkLhZULg?Dy_C7YOKZCP;_i`9x&7Ve~csGP9TPW!wJHqMR*@?eRUKQ$!hZ1 zM=6CG==y(m9ik3+-3Xa!h1KQ{emvk*JwH*{o>GQu(a;n?P;>#Q_)j(D8qGVKoL0$q zsQ`XB*Jom*u9SB?gCYiiQx(-06leey$DnVt7q}@{(f~ivr~Y!(C(ViyIDKiosrD&>mFmHzF+RDEiWBnMTNmW-@7abErTE{sZ+BH{g_JK7@Ta~g| zt>DbAO15PGV|jik=BY$lEIQb8HAh#91w_+8KUJb5R|Sq0PSLETUNgR;qiXOZHD2iN zr>?WDrZv{)dgD8hO{1C_ko6GI>o29ccbmbiv9;t~^2+K;ma8$}%Se_SQMve5OuEHietP`G{B5mdUu>jM`bHWC`bODO2!SI10)fZtea@ z>v8T2jD9O^4^3Z`)ZDXqZO?stPRF0pesfZy{_JtZm9-Ax7B`pMl@$gf#4XqTNOM2= z_OAU|Y`3=hH14$P6{vUF4iPXbFB4_BrH{aFnJPZe=<{kxr;G2bO^~Qn99IKw?}uV- ze|3JGJ15{GdAJMAw%q^)&yOwDX74_j>Z9%_)PaT!LIq1x)c+1l+_FvftwUD-WWI8_uOl2^I`{Tbn((onMQ6 zGl9A*oeW$f6{P^!_z0K{PWElLPn2iMFVgs%2d=G~Y*!sU=0KMFgJ0R?VP?gs>YPPq ztIcRu#UrCIs0(CMIVn8c&c66p9!5D@%w693liuB&qlMX=fahotQGNlx{0hbAa0iW8 z)Y@^1+dA|>-=vbzvYTd)|OgG}$ zIUWx!jOl%g-LTToE=l%vfalkW){Z@kj^}-0RI8cSzS%iKgheCCEottDz9QJfAx(&hy9W))c!CV9Tt^lQ~8pElv zbaVs^j0y@rCW9u;0+&;?!8Nntk0U|bp3Co!CE-cZ_^;xFRD=Po2XwVRg@ z5$2T-TI_OCDwkf90`oJRB&x9GL)mj!uLsE#RE{VQCazTii8GvuI}Bk!E4bWB{UVf8?Vr@olSV1e}Sv| zM&c<5o8<_15Trjr-yrtDUL4W{hBmTq9U0NrInO{t_q%M?=n&L@NS*hZ!ka1De6C8O zmX*w{T35f`Hi4)@ntT{Y(5xD;lW>7WP+ii#=Vz%$Iht(;i-FyBu8RQS{IluEYxaFA3Tts`*ZW4s1+yj}jId;5_*#|PH72w>X zBhL+Y$t+kaEGzdmA@F3j5&N1Pftx@8(sn7ye$cm+A~&;n3(~b?*u!Yp!>@%?yKyfR zYzTG0(xYVV_#Bh+dM3b3T7YF?(>lm zg1yqE-!oOHje9b(?RK%{b~xsCkWd#~e_QA( z2Q;Y5HMH5h)d8Q|Hcz?ZP#713yzQBkB0I(~q3b2@b;e4FR}<4l;Gw22ZYMj4eBf8& zPtVpRKVqnxJmoEuGOBLC?!Xaz#(-j*rO|(83A3Gg zbY5}YmA#MTWi^MKl<}q7%6j&~Tw8ONSP=yz3p=Qa3Ng~vzAswU&)OFJER@OFgP zg&5CKQs6$EK_G1gu(%qMIhU70g?3YVMQHVd}!5FYL={#gW4-jSF80NW>}BDTAs- zbl3@B2b{aS*8#C`5Fp?_H4h*7W`!81?SKydhO(M^g;0`531CW89DXHUX|dDf&z@9< zQ>0xjc<{dPRX6S~K}RDgoUGaas#xB%-$YqMoZOcfkxE-s$% zLH>ewZeL^V(zHVf7V58D{C*h;eQ0vxcGya@jQ)N)t!p%gZo{5Zq9WM%y4AzyXxVM! zU4(2u66`#M-Xz734D~$BctmO?zVo)gy)LMo1<$!MYX>(ewdDX8j-e9r{fwjB>+Xxs$mk9;{Q*u-S^17lGrg~}%Z&uSZJMz$Hxj#ogvf0kz zMZJ>u6i>Ix&4`R&LrzytTd$fAv$+g7yu5aQ3)vR`n4r|-VEt6y_Z$qL(NP_3fY0wdrCBob<+WwEv!U8W`D_|%p4OXDXZv}mH) z39^UlBu;65B9orOTdU;o{ZH*VB=e5FTzxHv^sJnLi#pzwibv>#^Z2n+DVt zm4H+o{BY)5YMbuFXOy|bdzyTZC%cl|zz54duTk1co2$nv-16VF4rx;TaG`VbZZsoTYOe)wbTs_6~V-(rl2dTo@eI~@M6m>4r)z3i01)Gx$r%EN{{!cw{27(Fmy=&K)1T6w))gy0U^@Kj!?S+t^KR#$d?50&V|(Q)$_?E#mq zEc$9D7&wX4wMC;L%QV$8J{Z>8HrdGz-KMBrycQuUVNgNn@Z+GxgSwd*ghGs@aRyC! zV9>%AVnTmGOfXwLpu5#>Ju7bZUV<3>Xp7gd4KBZg?G8U`crzel|7k9`$2CC%?!y9; zc5!0Q-UZazksH=MuaC1+i#WxE@09QejLK4~>33fm8c)J^rLHX~E6px|8!_rN1O@6m z0mBApeo0kzx}9i<%5oH|k<+%y3fha7+@#UVIddG1TSv8EBQ`>6<*zLP5}FYn&njOF z$oxH&pGt%{36T}+*7N`uFRyI<;5_ufUw1W|J*l2sD~CP&wKPcLks%A$eT#T`Rr@i9 z!VgxOc?x~4?iu1U=+?tUHOqE`?k{s%ar>J?3Fh=4or5$AEj83W=~gwriNJVXsK%KW zhh9Vp!(QTFnX6X5e0dage$8Ddv$ag@u#}$3=5pV@K2UKn%H&{&QxLPj-UpG==$>Dt zbfC#NKI^=GX5{MWH23M=dZ~<~m3mC34qAtgxcD2r{xe7COT7FH2&)oeX_cZmQ}pZ8 z)AzM0OrQpr+~8-lfxLQylu5hjp&nqbqmE>(UsEk|R&Jx8fHIOqp36U>UIxQ{|H!3- zu$szz&!%2PqrXzj2TBJlo92kkB37vHtZym=gc=;Nt2;Wa!Ix($ z^exIcaKmqgCL-DS;v;!GQ8wW3BKg8p^H||e9hO}&UjWL%W;thuaufNIUhzU3lQEnL0fxEeB*PY3at63H7{N={Tzo1<-AR&bJQ<{|=)Iuq=0_@7vjzLat60n>vsd z|7gLr$SS_SlQ{Q3cWZLFaX~kVBYmf)yEpD~q(_lkPqJr&V2$y|VJKW)FO=ECz7nxTVUJ@LkmI&AkhgH{q`$N}CnjhgWOU@At@r#c>amB8CswSFs_DG- zLL2uM3T}!tXv*+;vg+lcj~T9r(hzukWI^pB!EVa#;6sVI z)=l@Ks`aKX1~dt3TtfWAQ3PF(ysA#yl8-Lu{EZ3eGjUEvimUGwbxh3VF_(#7c z=LXcf8WI4KR6%RS!!|z_x`g0WqrY6nlSb)|xe`G4^cLf9JBA@FnV;T6vCl4)dXUUp8LBjIkfuSb&$Ts{QoNohm zH)`fusdE&ki?$ZsT!e5{0YNxb6Vo>crxR@3A;x8%DJr{Em_d0Ao%KuaVJ|#MJa>Z2 zBG{kLAGR%Vf2phrGJ?I(qApQvJZ4ORuK4=Q^IPMywx3;EiSG#H1QL4lqjo|xRoX@5 zvl7uIf|+eCgjt9!n|26n2F4w==FiE^O~=soDO5N$%=P8<{sE>K5<#e8&J|==Qe}`% z-qz?&?I;vDBkgeBGIz5sw5?{kco{|3zW$!ikXmz;lhQy&dXUYf0xp0Bg1uV z9>2T#z1tcw{U=V7ek9LO455vZt_}$%q?*f?2vvKq~<|d!tCNPS9Ei>Ss<) z1cj^VyPimxT{X914d`7t-wblk-LuWk3)1`+dZ~ZCmVbHtvZx^7kUsddq4KW0lxHQj zL048eC9(xAl$D#LMXW`Q0UapF%CNom|4t<_{+>;D;xHM16@$14nNO zNxBxf0WE9)HOJ@ZIv6e?2&30dGL+5~bk%+SPH$Yzw&xVAr7+EsjBWNr0s>+$y{)Yw zySmIeKcRD=zOM7+bn<0g2ffpGQ}bzzMQA)J!LM~H{uHU@Dtr-+$#!Y|cLMF756Ob^ z5ovCVMP6NdjIuxZ5YYnw6R=5w;1g%%9~=iy#3%r11E797MLS+Rkr9!P^dsDjN;PDa z>`xaskk<8xhN8zY{^ z=Pq!bLhFr88V?Ess@SMknS9o%R4vtJHtK%`P#cAQ>y~hbj97Z)6KekiFArn2*hp2{ za$g^Y%P!j;hK(K@ztt8;r*z2H*v$$K!E+ zue(A;O&vW``9X65K!MC219flc7wR4ChBR^A&iBe!0h*$B05XeC8z5I&2k5HIj7B|y zGAFmLU(q0Pp{;{R8;^bgqsDSBgcY%4K`qv?JCZcP|KU9AI9zLRh(cVQv{pd=shBOcAK*5mB!)j0Dn^D z`RA)iO{=~~>LNH$$r0njUggMSg}WN*$9n?+6V=^=bP9+HvJK5%Fti7v#F(M^G6Pg+ z+f{HlS33e0pe@#Jnw=&hU97hDu>B|C|F_P56(M?qnFLgOlmv)Y9@FN|z4?GbK$Wi= zPx@&ptXG6wmVIEQt$9ud-=4Q3>$FCKySc_@i}0HEn$060f$VbFhG94wf*l(BHg`#}ex2gMQIF2h2G4g)2kis!#) zid#T7;cuZxSBNLkw=VRaT?);2a~LAYvqpsgSIG4NPUd*{wkJy2X5Q9xGU z^!!w+`-!CHm$agyL5#O6zK)etx+~ArG?x=$%Yp34G~JFmeVYJhJVuJ`P5y^Ebu*w& zrT%0k<2UCi5>Ui{f~xS)iOMf^^Yy{udRLo^O>T3(5M|V#pfJ(BHF0QJt%d!1ZAwha z_;gF)Xt5K-AysK;-$z;KT^_B}96`j51oXlO0-dXBO+hLw?6MUW)(qATwQhOD(*4^z zAA7PWv{0EwbbrlRInNXHD}dCHvg}6~9;ZT?uLei!JD-ZB>&e=|S?|~(T^J#OD*#su zzcI25LC^zKQ-)*zjM0P2qK5idL!^2*mk(J@9r?gJ!3v#*%#}`m!swqJ_U}b63->os zq4EUR*OqsihDuVU2l?N4kj)S=5nH22&R~l2Hsb7%<3w>U$)#%Q(qTrJK07ONvaD&4 zF%vxIUH{SW4WdVkQnf&YrvmxZ`58^YRqv;<%-(}mT(F+IWgDxMQpKLk{U-gIOTjptfa0$HLR!66 z86!SBW3NnUo`*_#y-PvaMLDZ}qa%fCmqQt8b4|)po1)KRPU>V1>B}uLDH(gq25Djb zPTW3_B>uns!w}2ISQEoS?)yviD$BZ}g<6^hxNeRlP6LYG%*w+rHo^fty%r#a^&v&u z(|$}0)_0ag&Er&hB2qF`ZH!{|PeUk+YGhv1W%ZmRZ|SaG zmj+!<;!${J*UIO?M9+o~vmx2Ps6dQi2MR!t{T zoYob2*s^rI4X=5vgKj$vCT(}#yS`H$P4&j^;=pEj->j!bJ>_pEXf{9b?-yuxA)@vR7ehuO4og~t`-2WY?dgZelX3p*sfRaKO$}50!)tJ0ZxrCH^ji(Oz)@?@ zo*_+2iU=w_-uwjr_;AS&0hiD_tA1}%aB;aD%qdQd!@qcX)U(tCSCvk^;```ji%0ao zM*s$YCOp|0R7wKTw=E}A$EF%3*B98780+h{jymaIbZBBM{a|~i-LNFIajn$YS&L1^ zk*PRsL8qmXg0&^gCjHLa{GL@#?Gq%sUgt~9wr$d!m78fG9vcm=vmN4&P3ah4`jl+z zGqE}~dxcr212R&q;b=>!o2xV+j=DY_P^{n%mavS|23~VL5acqRon~e#3UTSJSQP2( zO1M#^0q!@}+Pxy@eBZ+~I2gLk5tcs&(az{k_m853625gs8CdS-;Sl6wV!)D6} zy3tgs4xHifsgd)acvtPt%RAn!SokE^=sk=n+oo@Q32XY`BmHnhI;QPEdM+xJC3GX@ z5Y&^Ov1cu$<)!66U~t$V41}bJM!fcI<_;2A)Cvj<)=lJr*=Zw%IgD?#4Y2*jpzv}H z{nWXf;}4m;Z|m4xE9Jj1`^xD6roEog>F?p^(($|rEIvtEvWU>k&1Obh|DmvI(DHBZ z0VX3kqWpH_sq*&cDS}Do`)f4~8ws&6lV2dvd-{!Zs)ByuFo|>*FPk!&Y3o&ZaR=+2-z+!eut7n6LK~wgffnpY_v&qTe>4 z^g?4O=8cyqieqzn1#Bo6PIF>UI8r13v?&08Ra+trJd0~?;+FFCOr2-Th_tX4Mhvi| zc8!XUk1sT8P;=i}PHiKRKgRN^c}JjtID}4^K)q0p*{gLbKJegbntJ<9l}$8OD$q}a zGrL2L^G`FwXM;FONwq3-6X%>*5-v{HyA|wmroq@3!9c)o(Y`hrj%%D==Tc2uAf3C& zin53AYG2tn?BRN4#N~J~_8#TH996DtF?m+qP2q0Bu4`4EdF>tt zV41$^MY%Wg_v*)Di0w-!-CWxkLijjEpI;lYByK=L*O$+iYb1^jpMHQQ=YQ&SJUp-VoDU_!}V6ROhP8BH(t9DIANvA|?g_JVL$YVl!Fvc$Ci z+==0}fkn^Xj~NtX@m3tXmj3f>)yoAbnPM=`*0Ms9PM?u5>LsWuQVD;@b@F%SuTL70;kNQ3pd~WR1SR?Xzk+-A9yW-)ZerIB?dg4 z%x?BYNkyekDwM5IB0p-^)Fv2%2z3!uqpB)Nb3QPb!YPD|&&P0sl5&QnbU8{ozBbje zKxx&O8CKl{;61eP_Y;cqFbfxQa`Zr`j4SU;^922$TO-tt{ApPF?2$!X#@It{E&&z- zrw6gisfgGDr>0}eeMHgy3d2Ojm!q=jdWhXx<@h@^3zDKzlisYw9+z5+)IHZZ} zeYh`;J&Ap|P{v@J7}JS&zaPlO3P_TkEwAk77?1&~3cJBl{5iJ(U^QBAosx!1c;NKT z4z*jt{sgb@spF7f{t7I{(%xHO)YW_TcH@6 zTQmo8#?9wIwo1KJ=pZ(?VCvOqk0}NX_XBL3lLih>$izgE_(eptX3yn7N&MUyQc3D_ z8o4@+5A{145N)W1=8XI^HiM5omfYs^Q|_>6&e_UtQ0P>x$9ZplJEEQG>c+- z#M#=H<}1MKz|zc-kKdEC{)@Hte`cx=kx$le`Bzp~P?<&dDr!&L>FOK28Q8*scdjI_hL;+t%!tt~}PiZ^H zMtPYRDc3;HDy11%aPl5L3dIWQ&t*joI-1_R8ws2KFo}~vMW>h#3DlZf5;bM%UA51X zT|!dKh5~AR%!vQvtlR$hH=}Jjd`Ed<1RP}Zs)c;dQLH7&st#@9>8%zRK4%o?ym0nL z{MQtDY+WZw6q=r2#QjQnZkAW1cKNlr!^h=k1W52OO-qG#lJ%@v?kef3K-kZsJG)`z*>gGcPIwL;sY+~dRY!+S;*KAq`2rsOceIbqyUgi8bhJeuc zN3l`1f19gZ+K!Vs2C_042Ok^+!8R*eR16C$s-KGnJCbqgzZtD(uS@>x*bs<;2i%@B zwC&F`7ZvSAFpD))qfwmMzP^jbZH*pQyDMt;hr}7P_}hAp6Z2@TB)-cMR;S$#n-~F1 zH!cuT#2+FXixCKg#|>N^>_Sub(v95XQlS(dN%)7eIb~W7K2^xow7^0lCm~Neu;?$`nEC~g$^*6B`xQ)qn9kxJbOMsFAR_EBG|C} zyGcg@5PZ;d)*B4ukSC)jL6iyi$zP@)6Q!4u8jto5#Q~H^Kn!4+>f0LVY5P-@!035D z^G7=TQ*$22ChQS%e;gl0@zjb10AC$$f9T7j?hvg44l%>qH)~Jd_YAmuMDS$90av0k zWNKMo-{tA@f4>Z{-Myp}4wW%$yyW@thZ_F{1AfJ(?kMQ;6uvr&1H7QByKva<>A{v3 z$R>#~!upac{KTI(Beo1UQ7XJ1?z!X!K83e9dK2bXBES95iSH5CzBgAZhk%Hfc@t`a zMWF|YnS^H({GHYLKR9;*$ZgTqae7vS9IIz2h~R@5W%$Y6mzW{+!Rx;90OB2J?Mxz9QCIF4)R@eOukdky}^`1(@%Zgb(s+@(W7hKwqA& zE{_k!Bzmu+LSEh(hKs-ws&15KM5I;L;(q2@{oF=#?v`hJI=!i|gZIBL%fj$6Gh)wb z%uqOc@hQC4#m*cOp3>Vl72#dsu^r>T`t{eC7biSpd8hWnnH-mO7S!wrwShCD4<$j5 zyo(I_F~7*&Dfe{g2L>AOn>)NcCGQgf4gZp`U^dPc>^v2!gzoEs*qBQ5&VLl(2orXKe%W z0I^QtC;A1n+=LoJXVgTv4NS1n;qHg=9aTD$10Y`Gh-)MKk5tH_kfDWqp9}lu1cNg~ z=Ldx#bDM44Z1b8G2LG2%`CI3GuHjjxv1y5HO+nvBBP%COeyH2*>@>IGPfff&{d3WM lyiOy4+_1?pYS&nMfHe0=-PIX{6nX~ylN6N|DG}23{Xc^`-U|Q# literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/images/graph3dvirtual.png b/docs/modules/ROOT/images/graph3dvirtual.png new file mode 100644 index 0000000000000000000000000000000000000000..3347041c4d15f234b6ee9cfb46e5134e79694c0b GIT binary patch literal 73405 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
  • A{`!ATP#S9bVnF0{2acfX+l_|gI*+}5rZxJ@u zb{L@gfec96tHW$#Xzu5q;xBq`tCCwm*z`dZe>eq`)vBCIl4E?{aQbagWdwR2HuMPq zSi~T{nL*@d#DiQ#O+HnFTiHQM3SM{PcMPv2`eT8vkG*WYx6;Dr1~LJti7W^tV{Yn* z>5{`KY<z+&;gnb+We=FAOdW z5u(0oG`rbzgVdq3vuxrm4wx=acD?THKy3L81OMfqz=AFTA{wkaN~6TQ-xY_Y6|jN* ziDsBs?}nemaXDTqPdGnwJ%2FQe|kSp$;wiA28VCK~DJKo2-gpr{ zIRl5n7IpjYMbpxXaeZ?0op;r}I2@d@bzv2e8OhB6?(fmyfqCBKnauNCMJh8FyntGQ zJVS{W96RDTFTJ76t478h%?@O&4ey6cA# z-oC}A8NCdw4@0fgf!5s6CH=o0E|aprBWs=%0=0VCL?~p!^vtxiVFqG}*(_L_3-Vn;UsfS2hqSOxXSUv69g(Kaw_*<3)etEKmij2n z6e_g}#Md*Z6KDlX@Wgu>5@9mW^?vNFGKu$+Lk3JH=qtF;Q~ys|2=xGw#q4!>0JJKU z0Hj=BC(jBsf+DF^G@86!y)eEgd#!Ng_7(ubP(6RjXCD*yqzK<<7~>Q8+5gQ_hnS?^)gytU?4UBrPujY+4vxOkhgrxtX zdEwi4XR<4_C(RANn>L3Mn^b&kl{tzd+a#yFO%M2BLke5(RvlLd(Z*=#WY(-PRWNb? zgHka)k}Jcg)NLR*J z*l&l9yE0=B!aHCHM{ERKHrjX$FmYM0*;d?oyW`T+BkrOI_ z1Gcr`^2b+40%M9^hBvBJmBwr^F$rGO*v*g$c@4vcAM~EaXUmtK{->{r47_fJ^hUqr z@&nIr4HRFEa9;m$9-{aYhtfTrdJPCZuhCV&o|`#Jki5{;Ucm7XM!3wM#iVT0cHg&Y zb*qR3Hk23FSbOiOQq>6XutO)HB%IHHcAfi~LB^^xn582Y)D{}gKUgod9#L=LF!uXs zli)hD+!c9d9%?L2Y11zy{@ik6Fd?|+e^+^DOiN&hZuSB?@+^)g2F8X2MQsx^f#p}) z+$+P+&Nfw|?skDx3_DQ;_E?GWbl;)`Dt$^fe>^BOAfK#Emd)mEr?-ig^|g~&tzw=h z>=sRrfWS2Eb7RZpGT#E#jo|fT<*(si879ApWp4(%rOdar6*}Lvwmn|_7W3W3Oyruz zIellM_2U0tYmwfvc1m+0EgUoQ^+tRBTt(&mkMfsk2 zDfoHgY>|ia%Bz#QZ^Rl4A&H{-8QyUecID#GN$*G9A7EWY54-@8MWyJirPh^O1<(^Isg zM$d4i>j-=%W8L1ym6(z8w$}XJUfOI&ZG+0rF|_>a{&7^Rwl^5gPLp#NvU*`GDO(a>vC3RF1GL*oZS^8+H0?As+h z5aLHun?3UuxOy7govKcHtQrKjUF@#U-CE(eLHvm5 z1{&5zkmL|I&3w=kp^FQTqpH_aK-8n-LPgrk5DGS$ty%gSfv9o$>#=t-3 ze)RPdwZQh(c7%OEvwqgY;81H@5wq9zv7I5#P*I%xzx*^C*~`UeKK<}t@o$WwvwGk4 zPRFe_y2F7?gGSN}KtiwP2be5|qZC*-Af3Kz*X#-uVz9cdX%k#EdfIZXn*5WAf)Rhx z>%f(c!|Zt{Lxe=GBbnJ!99$jbBmgm$FB|#x71ca(rTZ$zMoh1d$T7ls&b&h5G0fc* zI&Y;qu#wDvT{X9KN@&gen%6WARSW|)A`P^H1OqeUXg#R*++=?7zU!?Bd|i?nLhO>9 zCV)G>x>(>tOV%NdzI)kJ>v~YT0+bik_g|cLzCpxC`;boP^XH|_^m&RON?8{9WR2FB ztp5EPkw52GcOi*P8e2g;IUNn#S!w$J#yX5SbM8xPY953?nU$cuvGV$j|M1|Qb7T4t^6{wsBCRC3L7Y}C>mS}w5oGF7(v zrD^>3pr*(o)>=AdNK{MfyxsfC{S`QaJ+Hfg-%&^fYCWsG3Lw!T(p{{vrO$1r-+yyg z-1Pb0_njyC-X!TBwmr@~{mTs|ToxM*FeFx!CIcZycp>`FM%?p6U?C##@gsOSOYW9P zSiH%3zpjoLrs7RgQu4~c^_SlyR|2?w#uO{<$G+4ur+3_@*e-~$MEM-Mgq&;tw&%;a z7kboS9j{fw@E^0@F3<6qrdX}N<;};-qH5B849vcQOyO`wxiotE&6Dl1#IwOGs2NCF z$c&O4q`z3}b0_rB$3BSM_ivL9p1JO#WF!@-Xtd8y@TA3TIe71WHt}&m#d)@jZ!$F#Fusy5 z0pDUsn<$%RTEk@0(X6R-3wmT91MkW{ow)jN>0HkfewOlubATKGepQ@HWdRb zmS*WUzo;lUXikSowfO7g#A`Pc^IY;u=q5cml#7QeO@@kcC9Q>>EHsQV0c%|TJHAj# zODVG5dWK3df}_`g2&i)@rln~@u%~KQg81dT3r|?Ij;mbSK0l$1SwSowIRE#=;uyDH zRkAEarcs$GQ+|!*vg~^Af8MR% zfnD9A>CwSMtv3hjN{N6cbj6+8?hD<#+-|N!LH@RFx#p=gh9!0CSKo+i8 zbvHwp@`Hgn;5|m-@Ww;y5Kdc?3>u?K!*|KeXA?A2nk~+cW{)4CsFtH-3^Dk}X*`bk zN1Re#jinkL*b3XYDu;Sc7kU%TT^KSkVFR8Ejmg#-Ft`mEzNJvhroX*)Zm_M+=V@94 zPEmAZ+GCEYQrPbk=J*F-V_V!()yEW zY}B9TOT@Df{DiZ=2_G{37GJcmXh@?G!c@V_V%`j6 znoXaJizmQYi59=A^787Iu-ed_u_zv4h^BWYn)AQ9s8er<3wJ@S^+}21v)E^ZC3yeR zyBL)mdwOiCE09^I&ZWG}O1Z@6T1Jtu(XfD2_@NE4iu;l=y^9qREgd5$G?8@PBHsu) z$Qtr@h_X9;%Qt&LMRA_6KKEd?DsTk!hwV+I^EfVkbOdOoI~(@|9zaQNAu{2>luM*P zxloI#?IZDwFx*|bAcU(^GS4cOYcF0Mi@~-!&e9{A8}1b-r5E7$Vp|0a^=P6@z3=(n zGzz6Gk-DylE{Is8l=RFy){0G9RMi_acK)07Tw9Lffl)K^QVHl2zT}5B{W6&PK|;^o zTx^9=9#XpJe)YxFo;^;&d$MMjUR1YADedWcPDs;L-L?rZcqQ2d{{j3wS&v(`kG&}9 zjMmQ$YIh#=r?32k^#jR3-KK%^YEEpRS$wP*hmah|0Jdu01y1WZT&@hHimSD1xZ9EO zT2*Y8M&w^<(=zW&*XLm@m0gy%Z}(KdQL)2kCXP1k}V+ZeQdf(1&mK6=yR-4--P} z>7FHoPn&J`Nlpvab-!-T^O(E`#(3vl$HI0~X7psV`l1yqIZKpmm!A@~>}f*t%!awO z>P*hI*vy=7ay`sdC?OKETn5IJFO6h(%PEE8GClw8I_+SE@D2PRdJyP@XH_`qnXNNP zJE)3DIBt!~&?Pa|mFACJlu*oTw|_i2iHR5@IWlY2${xI;&dua;+{%6aSr_4EHw!y^ zOGiqCDxA+t8pAIt@~CxX3dR@jlp>H~ciJsL@DDxzCP3_(tGD%2@x%eHVOq;Ld$!$I_+)mfIGiK3&C}#iL>ng(b>ZTF^hluIlSMv{7c- z%_D^D)q0k3lpD_2*za0mq-)c#iK8U6>f53skZ1t-tvq z6h@}7Xms$BNqdE{aUXvEhmHwH67RD*S2fSny{I9b<6``<`c@{ato2nwo@xu2Se5*+#o_HxcPj z;Y#pUngB_Lg@Vmwk!1PJQ>c^8a-69xNxZ2K)c%Wu!t|8dotkYTp3|2$Wo?Efo~&EsvGE=O^cL2jNSbS@uh=Urg*OSk1f@!$qorE?Z1*4&D4Pj0Ur#p z8#m(Q?v=m%y9PcRb%+>VL#5Yvy!J*W^5@%f7oK*B=2WZhihk*zrSeh*BUM4?9d%#J z_&+UvdcE7T3G>m*Etb#Yeb+)#8z{Jryx^8C!)nxv_QdUQ*sy)8{V;9&kQko|`Aj6J+nFT_xXtdXEiK?!6SwK)Tr>t*q&g7gHrc#lbxaHN5?1JL|}uKf1i1sORbX z7u^%j(KZp0-ni^aW97$(Q3lxN*42nCTW^^P%!MFHm!yVvWUpH1x4e4va-s{DP_96o zbMD2@+B{cR()9-=t-6%Tv}Vko5gYC9(5i}&;E9XO3(P$w6P?k?7D&DlXCq zc%Cb~lF>4xF4h$aIjAN3BHOjiFFr?vPT0JzqM%vto28xn{y4_;$QYYHko9zvRqz`q zrJK4X^LsX+T?kV636n9OBcn|kf-S9reGYSwfWJ@{6`oF2b?C|su3?{tWA}hmzg9{U z=virGF%yaF&DnnuwTFn`#3LZz#7Lt+a_Muo0Q-bp&zEn^CKa988?2_T;41d%41E=0 z#@1^?%o`q{8f600_gd_!sLgIwRB5|d=wN+1cwca^gnrsIWYzVnO7hi6hSkhciC%s~ z*=$bNq)Cz_4vR>I6_?QQvsz?(##D;H$ zRD0Op%4RZtr^={J7;P5&LqN{tPC95`!XA1|If@i;m+4L+aD2YL$Vro|L}S5y-Tm1n z!xvjiH2z2;`HVs}#k1uV=e7j;GQ@15{JWESUV-b=`)9wykYwQS(lKKIc+PJWvXruqK=3^VupVZUOXSKM z8%O^5R3jb1OBa;n`QAfOR%kojQ5#>f148OoEv!byPqRhAN%H_LhYqRKnrZ{V_FW(c zUy_cdM^92v_DsbKRM$8tk}4hT{8qikN1AI7whCeUq{@|= z`80n$nB?|RcqdUuCq1O|pMw&!P9g_aEo$Nl0gEV!_eIY+P#^mH-J1maKoA|e)(gsE zYFr!$##K7Mdu4$b^e!&F`I!IWEBGj-9L|T7e{)}GV=&@f%6*i2+P}RvL}?8xOSXj9 zTuLG4XKwb;?Qdfy3f(dhaWEF~Y=-`9erU?{n!JXc9G-t}ajw&+_`Wur8s|3MXF*FG zk>ae@ZJpW@G1B@#rAeD?b&{RAJ-1d$`|(oGwxsYZ;&q?Ohvzqp;1>)+Hk<&-tI#~( zfRXKTbV&sP`NV$*8%y3;fP;Qx8NT{8u8Bk&3+1wFA^4~oPnS%Ss>(bh{-y_{5=yZ@ zn3D%a0&f5*6T5f0@&5!WPG7$aMA=yifvteVjv5(BQAf!hWOHkKU*?2B}H&r4yrG7&U{{=h@Brc z8tLiVnlJqvoEEQPkjVd}#=F`s=0UR_@e(9^w)NFn?)%VSUE^zt`H6p!TtzMohg|>vJWX%7cruAUav>7qIhskP*cR~KE0>z`z zaOm^+fZz?xaru~EDfoatq=pDzfTW7pscyed(M?#U2doX2(MsW@)b{DZe$duUP#IWbM7TjxQif8;VE6nR-G|YM`@BN0*gAQ`?;kMvB9Hm6;b*&rDUQT)TbL2b-E%K7dNN!K zTu8GgsP>=nnE?giCPVr4}@2nD%shJxJ>aaLp97|9v4zfNJ#D zRv$3y>IUD0;K84k%PmT>UgPx81g0=8rjaJ2lV}QmNNkwdqupHRmwe zfA1k3LB~Bct*l(kMY3B&k1QqPxj&TzFN)lQOGWeim|3b6wL}Gjlb{`gALM>O11l@kpcsVMi@sO5C{2|6tSeQ@jfkikmzAc<=z2Op?J2lh{c^ys zyO1(<%FeG8aU z^Qo$)U3)r-qhcDxd)?2wQg}&m-X)vWUW)I>x>(&;Z#v@r9GKp?VA`9W2%TXQ$*8BumBG zv*y{nCVL7ED!!x3esgyUa&5joR}kDy2Yb@zmoF>;&|s5d5IBGzv&j){G(Bt^AHqTo z*gY07@PfjhL@bn>_bC$I<^SQx6lHQ;>LXl}V~C@*E?#-~+<4o{_YUd&;j&LiW5cYC zf@3lq!4 z`4yu|VuQ#k!w^t~v1zF~%Yso^y?3|{582Y}UA!?da_zww=?TTqRRW(e^h70&!HwR2K?M>%0M7I@Zp6BiK`0mK~ zR;t+pzR}S@!c|j=Z3e9CngzB7>DQC;aM>i>MXZ{ZaW@_LQy}yJvwek2r;(B{Ci#}; z#7fC~khb7@dTc`kaTY&9u2PmUE!>5*Axm&&>!Yvn>eUN+PE7iSu_4CW+1=eoPb){iXhz1Z_>{^UcZ=NsSXS6wuFgJa z41;gaw2q}IxyDQ_wc_dge7<;S|3!B|b0lt3OL|lW??TuJ-q6aP7@s`+KAuy)Jtqk+ zc!X;szkWH#=e;&LL9En^i9deBOT_pwN0dZXfbe5X?;$K&;1YVfZzd$CeqogbDx#y zd$M&^8?6TR4x>V8Of%`vvdgjCU`+PFz2M6kSyL&g$dg4X8@A zt{jKY3=6gR*J!q9gla|5{r%duK=cx>?ri-n~fN1GYy$9nuNt+zulamx| z(11Zz2wSxh&vX!bk#^#q)#if&*OFRkCQD@=r{0Z<6+Y@&<$Wm!Y-+v^&VBcGOz2&G zg5TY*a7E{wxY{|Ko~FY@7Z!v;kqDaVd)xh4or&fE%*#ssuL}fY&T|Cmb5+~*@I5!| z`>}a8x@q+VMR&O`nso)GGX@p)Q$fvh6+8-BSG8jW%)!le1`Qpj5^WdJBpX<)Lzj~= z31%ZXfrL1sdfWyiLuecM^d(;gsi=9}J(|{rQP%^9%@qf&<42n$r8UaAXUnsMe0>_s zmprA>6PaQO-um1OE9Ez3dVE;AI|n;w4Y8$9LP>jPx3Gw6zm+pwt5eeG7=3FP9>TSE zl`f8BB@B%2k{Lk}v8e5%Q+=iY+K{cDemnbGhMoctseFR`xbt)d&P1Z|&(e%La#=184^WA1QIGR;5je(g}p1*2<4O*^Za{bGv}8(w?iD7HL%0Qz2y|F{z@K z@vYpV9}8tfD8|YeY z;X|eRVwghgrMe9t4+QLe_l7?0R*aC|)~*y} zdRXwTN3h*9_q;~M$!)tWZaY0_-i_b5n9*~EQ=mq`u^r5*&w{jp?&j9d?Do=VV|EqT z*MQ$w(qSQwBxQW%TR$;5u9l9a+!VG4+CI#UD6vOVi6In#r|&P$-!wTNq+8Iw$WAP|84YN{}u;)Go6ORM@c#% zkV02H^h@jh!gSkbiGEbAOeX1CV@iR9;&sxsRe+Shk7JaU;(qWy9M>8?eXSlBGXe|`fff- zGa-OIJH{}j0zbF_co@?ySz50BuM&;4jbj3L5o1_xu|iAIf84ZwpZUcmjJTM-y<%#; zk27jmF|Fdnn@hGK1j%!|wUP#%O)uJ$7l(NSeuVBZue*EE-!`CQIk(ZX@ond2_q zpY<@8#k2dP4TPQG+3$xK^Z-z1u9k?2>DqRygQcw9z^5Dz7R($A>EgDx$2i#-Sp%jJ z$5(Pu>?ys)h`TNSWAb=?)qr885;jKqJFew!` z{D>^NUpjkBru7lA(z9uMZHf5_WLaRB@w3H!!YsdG!Yua&X;`)z_xXRsPq+#+`>1zf zIz@B={HYxy?8VzLOH1_>R813|NLs1K~KW@#bmR$MB zpTQSBGv5qQj&rKb-ogjjVd%(XgUU!Z6ogwm#k7Fe|)8QRB_!aZbY_h;Ja?7_9*z7X_p*0i$KWi zgnne4Ba-a@P!V195f@({tRlh9wI*i_a0uVCEyjL}smH=d4$-?;3v>dHF;V!8VeT<| zAWP5*-YxAWn(KvmH$i_7B~ahB%~)L7-dk9^juWuZepkJu^^Z$I{RUMu4gP8JMm6}9 z>9iBWdQnW59qA^S%y?sFZ~}^7r(IL)JWqg9RrZ2@w~aIB+z%@SV5g0oBV;{oGZUtt zER0gEn)IDDS{Q?$n$iTNFW+ao)R}Y#bEvj0H#Q_IX-y8;z@nOBC$01M%QBgHM`o+1 zMu%BYyE%6-59T|Hnxd7m?iRO;)Dg$ZNwGjnbcjhF?gv$<2MKB72_RNG@)LHx=jEOw-9ehu8^aeqK8mSvc!X4v}1Jva@YJ#VU;GrhaJ zZ+{e~yF-utBEIM2q^$BJcqQDe3Y#j!E1HF+LATLBXO>E;nX%9X+_5L6LPmO=&u) z@6Svvai*gw2eXwph5;8Q@mLwI%f4e=?~+Xi_iwM36&50L^<)oKj&Lot&WC# zj%>(jt6s0;{PYjiTi>|R*V5_>uk&rQ(-~8^#GcUzwvF!s$?bHSO&L(X%JvQee`J&N zah237?TEir_uh!~4$6T_F=>U0&h1}-bMb|cPJ-P#ZqJS1L?H=yY`U8udk2J-c)fTNST_W8`$ELfayQHN{K)OLdy1QGtL8QAoB&9df-KB)UM&Pck=lh=L-hZAS zde&ZR&N1hB#~X5(H#MZ=#9yng8xF{n%shy)s{br+KuTet2B+ibw!Sp2^N%MzPZa=l z7{;${zJ8rMGi`BBj`U?lo|hKU@%z=i+SeD^aFy#1|j;WNl4!{0F?~*K6>8 zi^Hf3dmnRqEEKQ*8|#E&2l9Wj0L{cV!v$i6^lCq!KmV@Ex#F@_P5C1+<94DHnw{|d z2jji;yauXyt7?wDaA+I(sA*AsM^=_T3V}8n+FI?1iK4D)DSIJz`?ejD*wdCS!8^m6 zOU7cIs0qx%)4JBq3|3Lkta~p4_I|^+yV9+Dd-58hS0A@UhNE06z5BB}Rl~ef6st(6 zV!cPAkLhyRzJ5E4RJ_c4%Ii^YBz8$dM`g~E2AzY66{$n^-hCTnNxs@jE3BMMQ8RHh zULA_WI(TWvLDwED&&xOXYDFTmT{a5=IfLKb0HTuDHNP|POI8YT{G~Pv7I+tH(N}OJ z1~T_nz32^Iy-}n`jE5pvLUfhKJN_MS|6gnbF(?4+_xr{UXiNws5}^&{3gyq|r%l1? zdHg8*&H0$z=yS&CHpcOi;BkI*RrhhB~r4+qLG2flWK$%IC)TepLhGc}9CpAY*GO zyECE@^v=6Uf?1wi`113|_#E?kbgs|Eh1qlAuNaOK2>vWkaCW!3ioYdf5iH>#HY*5HimXLF;o+9 zr4;B=R#7&xXKw)a=wq?+5O}#h>0if+_j=8Mfvb?G%S|N?gR=`4wzZm^U<9sEgvL{< zJgS4**E>yO^F&T($~-i4tfA}#?``$p3t`M`u`yLvz7NJJ?;#lC`BiOmujFopABq!u z&+8l6BqUegynEpgGK{~98*TCC6lOg(YVSKE6Ju>ubH+Gj7B>60q7FMDEr*Ia61jMo z_YOAhn%`vvOrA{8aY&FE%@$3Hj_Yt8_c4+Nm)K&F_v-q8zAXY19=p9|q;#EEP<(H^ zV?|qDU|);heLVhtwCFezTH0X)`>239buIGn6>vF;>t)H-HB(?bu|c)hiZOp!F)9e~ z{1ES@s~jNwz4% zNw+bgYroKSf1-9_P=8a9vLdAP%Y_X5I>joHU{9k*4h^7C+`J6y{6g*-fdCsMLrzFf z88n2pSU2g{{`MBjtoD|9Zx;>%L2Cm05+Z^EL73 zmF!6)`s#>ghcQO^IXWeIuG_Vqju}ML&3+=`O@<)q`jH(4av+7FLzzKou!Il0XrD)P z&wEz-L#D8(O@*jQg*>|NXq7eOA)xrgu}JhWw*LQK9}ok3p`lA<&%ZaG^p{(m&GZ0U z>vq7B22oA_B3|VA&sBA=qCmN3CYP;I6M*~P8H(>k3mGq=C>eO(Hf&R7=J@j_MaKi5-t>tep4l*W-ZupTn}on@|*ckZ?S>*KI&+~j4n;ZQeZp{BIq z`x~YlK$4ytuKqAg;&?}8HH?S|l^W>PnM!YGrvSKX+g@qq^zSb}9FF%6j-qfFUs+=b zV0(&l$lyYhlKoYEDA`@I##7ZGh?HXThIffYv#(WzR*T$9*B&s+f8Dou4v;5A25qwA zX$EJNxT>@_Em{kf;!T-lY^hFd2Piv{hYo#@imz9qZgzl7^Ks|D)-5}fB0K0#i`Zlz z27E2NvCcw}0;yv;shsxSaPxV3<;r9;(PvM(SWm2wT6L0@Z>egv4WKtV2+NW{yl4FR zdK*$NDwpH_tvea$gaTPXjSka_0~YjF-DzPSuxmO%9l#Z2uUp>=ViZjH`K2iC^4ndZ zp`w#`$K>})XLU0KAHxuail6A(chix3!^%e4-zX-<7@7(rnrlfM zyZgTGh?DD;ufS=*()uD0uYB!778$c;oWiJ6?Ecgdpn z$=4qKw;o4qPupy(NplkpT~=wSK>xW=m2}1UcID&w<`@XId`**ug_-pr+9$QSxH0$Y zLnYw{izDCLG8`3wwvif8gS5F#5=7Nc={PZqitk~M$a^eht5C(=?D4P`F*irYv(>zwDP^or)dohL#8PvWLUJZO0+5^p?iDvTBH^>f)Fk^&%FXUywsI zHL~V)n|{q?=gMzAk)A-dm5DMh`))qa2HrxAKHYBef2V93zlH`C0W0W z<}MAQ(AeiMt4^ri)I7m!APRE&XM0nlUNA~kqQ*}W6vDlo2q=yR(CR+=yD!y!BPv3J z4`YD^ggU>v7u0`r|8A=BT!%8d92fm@ue(10HgGF=o&dQ(xQeWNrtr5p)9DM56zvD+ zl65>)#a>P-wQjDo>gzvTQ}=q=@)~p{RjD<5PoKy1L9h}K{D&Z;s!4$`?Zc9G@}mr1 zn+k>zFjCJU#dBFaXv$sq@)B*xw`3!M^is{i|Kiqfs)slD_0jUeOIUf4Jvm8FxNx7d z0C$anpy7K)gUYi_s`!dr&Q;WCeLj&jjuZn3hT4E$-zS?KYWy z*r{zX4QAH)bmQ*F=EPL0Mv)(#pH`V|q%&!k?s-=1l<;J7?SKEl;)?EpTPBDscx~wU z7(2WKD79Yi5%KLTHe{*{*9e%iwvi*##cqO6InStgu1V_I#?yx>$J5WLUqYMR_g}D( zqbF6T#2S0%sB2yJ6uya#84xAZ;~|Asog4E-~8$dia>rhIVd9F)|S^CjyHAT}P zF6x5^(mMSYDz4obPTgsm> zktI#cZIFI!V}A3<&14%rS(R&CrJrZyeWO`3hiA;xdhzs7Qm%z@t7!a*H^*tZ;ECV( zN&ewiyni-p`(fe7%|N96h4yItPky%@8%pU0F7m*PI{1&R=wJyx7)ZqZm?_$$BYIut z4=Fox1ejr7^S2n!KQWH@&fa-T*&iT`U1c1g)5N(%2Qet(8ZX?iayY=7=YGVWE^6eX z$|e(i4$$?R6{67&THLHI`o>SWWG9$&?=8lqW4mf&=DdzxX_Xen6N^68&fgIB@k*TQ z&5pjW3Fx`>@+&&IHWiK~2BKh4}UU)uiE1b+d;TFBH+M-z8|vP06LY zClS}~Ji-X>%U+~2r&8k$9C|>P|0m=@m>j|N?BNI*LfC{jAn=D{%^ua)I4CHv@OM8N zTk%qZrMGjgY%zQK#b`x3ovACZ1UtP^A%Lw{&7mOir|5@0w+O3YMYgFb%#bPnSw;%14 z8vD0=Ev0BGg=@REc0lmX#GnNVK0-Fr5II=YEJ$`@>dsZabwISV>euR~xNLexvCzaPL;R;}^D*Fu4sy?N z?SRfVLdtClWu`5y%-d!M<>+`JUY16dTxtFf2x8V+8(o3oPXR;(#bLZw@eo<6HWN}H z8ZW%o;yaNB*V+`kfbHz3JQqIhWwHsulJ^%N`+Dhv zp>+S%Am%>Sw8eL!QXSyxI)wYuQ`Hc1W_BYjlvJeFwPaUmW>^M+U%Sb|*JEAPDW#|S zm?&c|XAWtI@j6e`@j}_nKNfc~!ol<| zKLA_#^zL7=j_>5r4TI*{pX%RtZ4)IDUpBcP-1_hzzxK=|C2p3LvVo4Ng?&SaIVZi0)?Hnx7qh<_wU zAE;&*BLpq4yg6HmZ4-%Y?C{FBgo7t+2VO+r_CMhL1@d~GB=aAPSGT|ohd>{JL)rVv zDi(E&Nnd;iTT^9!BBQ|&9~`v~zb8EwWiSKkaT&_8u5Pnj^S|xt?!b$x@{ep`+t9Hr zUY1bbpA-dE8Fzf|rqWjvEDCExcdSvtQM$LR>$#{5GlCB+NI5m7u)k#Frh8 z&r5)Eu*v*4BJk_43y|itsJV>F7GzTm-8anfVTKFpK5dOn0aJU;^a= zxnrJk-I!!RKAhD2V(4?@-QkW$KMfpVk{is@ z_}|Xi3cW$(W1Lf|+Z;ikT#JhlYrVA6&t&OxEKm2`YCFiO#Z^cUc8J<mx60;? z&peSDlx#HCQKp>V>$U`aqYYgmmdLvN-Pt%4FSP!>;#Yl|gpO{$i1*mjQE&MiQ0pp;D=G9Z> zZ_59iKa|C@Cp!X82#!th04g}=aRs$;}?R+qs;>VQ1p!j89EFD;N6rsFJ9(Z*m{Emw_@5}{R zA_;2V>}V=j)g3jJZ8YER!wi7JaoVCTzG*gy?3d1nk%J{fN{$vtg zr|2wQS56BGHhw(Twl%+DI`e<5dEQHd?M_nc{`LIm+x|@Ey1@83n5h_SAWkKuKFH_r zUy#Mx`Ti6t}a%cEp^2Vp#Ub`$S6ey{u-P3oiR*?w08M&)cAWK@FU!|rmOkeGF9pT zRqzl}-{svNo4>AZWGpF-j;++k-qddPshg+a>s8gz8##1e$J7TRvl7E~;eA6_l{dfK zyS*EU{*7CTfI4A~TMi;XZp4I1LB@3ed*yQ<7RnoZrcv)siQn4-hCYOZFAJU7Lfi&>tKeTLI=+c zoYL7sJ>~6Xx>y7?rL$?vX=o%j-!nYkLpHl^=aM?kf1mWx-j>yM#8qY28Yot#*hWHr(iwsYwgJBe_w5+Uy&{A094k$-&BQGvUC*d`1TU z$!RZq4Q{-j4n12mmi!&3@3?tkxKKg0aR#!Akaygq}vrocx4oG8YTy132OFg;6mLG z_rcQulQ-!%U}*8_SEqyhm0}pKiq=>wrg~^#mGz6xGURvY_z^*~$oy&Fo<*O&Jz)7oIu3T+}1?Lrp*@jK$Mn3 z{`524`q%c5a1@6{1k!m5RJeB#hyY6jq<2bsC4j~ho$kGXtAF;F5!j+mm(K^14rHFY zSQ|eA>o_nP1xWd@rg_JyQe&c@EJyo)~-!4RqA;#tJ?A$epUCr zlj>vfK~RY*P2$H9O!GRYz5aG$``9?ej7m07q8n}N`!K@d8G;2ga00D=yuDqcfI%@? zxyfReRub_r+oB}aa$wT(R*?BMH2^KTlL3drsgUbyYIJx=?28k68U$U26c>h|@8U7< zBC=JRvsUkvG_Bud6p|$pVUhXQ>%||_lbWr_#4nl0_>1rV!C@7pAG)OA)>pbOAzhKr zdygdS^{DmQI9ts{_gj#32@y@W5wD~w;Zg?rP-ewK)UnvZOAB>}^58o$1PRI(1zqzm zXi0%gL|3IBC%109Z@X+NV zw{dL6B#{%)iBSETcSgZ8A>c3ARucAmKo1TTdg`&SVj*icZiz_F^oYHWz~Vm{loocE z4HnBsZdc6AGOi5%gmH8Cc9yHpaITV>vNW~YRIxD%q0~v=HR;2`CnB`El|zq~wc(5k zUG3%TEjmF8Y<(q@jxCSt&vom0@;kS3-f?S_EIc3+P z*r$9;@v|su3Mjfo!6}i7_aYS*I?{crgLLFmVuGV-dpZ`-Ce;QH&_$Z$0rvslZ=72r z!X2gJQkeU(=tN^KfF;bkWSdE*5LCtZ)v%8U@7@v$&YY{2_^16NC ze|!gS@;^6x^FacBY3OL9_J)c`;ciJ`v&JYa<-`Y+V+q=W4bw&Kw{{9l>L^@ZW-}PT z2yZo%ad$XM;+<-g;AGCBhAit_4LaOvX&-wT4oP`4LGv3d1gt%6g?9JUv9&>k*FW_c zR>p9gDRZK|Ayn8rDN%J0{vQc!x0~NudokX+-5rXZd{1>>h_3%mTF(IIS{lt8iP1dS z4N=JBzfO9ZCi5+CYObpB%1q4L+40v%Rk*s*owO=5dOab4uWTYt{;3D$q)iW8!Sru> zK==}NZ;kV0p~(SGmM%ZMHrPxSHCjoym`WH}euBYg-}1I%36>=z-$*zS5d zfNc;fw{(HS*V{D#EmQ_MC9<{2N>=^TqNpQ1W!2V;V(A_DTlsadC{L63tko^jsEL?iUR)zf@mh`OcULtEcKR zpcG`(hPR>UhA_*aqh1Pp%Q-#a1`TUlq8M+hjj8^KkaU-F+HDR=icR%Ijw8KEiLh=gg%>8; zPsj9}k%6vq7r7@CYR6ooU(_c=~ICIuJSX=`Ql!{tF%R>>ux%J%(MV z3nf8J%A;O$CehBQ)w2V|8ha9&nP#C;E_k&j+;mUl-)#q(tQ&4~GF>Xvt3$BzxUG{e z_`?uPm+H;WZIYQB)oCbs?=wGlk~uojL&RrfMiEGy9QFvj?YCmE<6YwO=PMrFds)>> z-0N_gY@hlv&wBSV>D34B9$XUb@OiIc6p3lVe$!6)c0lrZ|HHx90p2o!9edMY1Mujz zlGLgqN@Sr(vR4B|bwE z8dX!rPj^8(kU=uq)SMROH%Ge)HD(o@w1Usp6T?go=#eVX097>IAiQb72jjL81x})YHw*u0?QFc43qn=A#WPKKv@}L?K2c zp;@m{>_!;5H1ugo$JMxjnqT9amSRiJ4244XUc=fHqpt1PV}+alAeL+~jxvAWTAq$K zT!Fafu-?FT6?F&Cw2$~27jNN_%t=gxgQD|)HY>Wg6nI)8)tUI%#Mc_Gh}gO!BFD<1 z|7b~`x9YwU34pmG182H--OnfkkI9V&<#$MM9;3j!JHgj3|LGet{^5`!!}ArNn3(}# zbV;NtYxCXZA2b1);d3_ulzQ%pvVra9!~Si9=9AAXvqz2mg86s{OLmHuWUl@0kJdDS z=&*pz)VmEZflKh^TVe+_1Hf9!P;;iFoBZ)mwp%$or=!unb{Rm`iGr)tvsBHYis9VyV#C#bQtZ9JS>xO+ z;NAMj{m|xm0MT|$v19GdF0y(86ddw^ezwxTkM1??HGpwdFOf=xaAxQ9-;}HP+6clX zi+%!{^W7G*vbZUqeXfN!4(&&!XJd_=Fs6*sB<3v{4pyE$l-SrKO3HSZLaEl~pIfTj z^{h+G3PkvWYijqqUn4o$_=H>sdt{4@NXUA5ipc$=^1r8n3Swy{)UP=(2`!LEyj(Z0 z;hIl~6w3AODJV-T?Nw~r=TMpAu<)1;&dqc1Yyq=(E|o7;`*h9rl_^(+!#F)eiad508_~H*PiyK?4LgP&buo zz`IID!gr)7UL;fGepIEjqPl(T0su>X4~i%HG}X}FYd>^$>zQX|gz2kS?=}a`2XMJY zM)d9;6f!971c6?KMmTYIocZVl|{t(^0*T;M7f3C@iH|m zq%7O(w^8u9>n>Z%k|pDlyV=F(OlP9-jnPJzl6xIeYF|SA)xjhY$}<<$9|6yJefTiU3UOhWTX#86jo{UwnabZMi73ksw*}R$`H_SBW+iNAG&+<0 zyueNae%=ds(~g5r7{H(2t0Idzz3Tqp?qzasdjvi5z30u3ZTBdqOuY|TH9o5qq7Jp` zWIGT$V9>U-vbo3eGA6$fU7fJbKH5e2Ry-Ha=q`4mgmpd>D85>2{X&5(s_FZiJ}H9eG1mD63XpU!oU*oGZWqTv(NV^P@-|}3ecw9qc?7RjF5oATHD0I zF#wJ#LCrT?{Gv=i1$(XmcKDin z?7}AqdUwVgEK(QccqyA2_dQEX>OLmC#FYD zK&Z;2+^7T$1C&)Pa~naA;821N^TQPCxUY#hD!zv%6_L$rGUrqR~?EL?Q$dQ_4Q5fIXe*JFVMsR+iD zr=H98i^C`K_VH}!P)t$xjTn~w$3S-tq16L(KeXdu!_uB+Lhpq|9#3{aVks~iL z6t}|X*>5{ZG8gqyqvsR8>2yD=U1-Up@6eo`cU-umy>|QMuy?lbwSmaGGpn-G(NuL zH{1D=t5iYTqqJ0g=@$S{RI>*%@VnpB48_@VU2S!)#x0B}+APd2ES_cS4rpKv_Y=o; z=s4rO$XlK01_bDyhCVkn^q>|}8pf@k!#nY!MlCF8uF~msjs56KIc!YRn8H7$xO<`w zJdG$GJb_n3YRgRC3Q3i=%^W*g4dz<$ljO%-t!bRR1mp!r9|3)=SG!;B3(5pcumNSJ z_BP-#Kq*(#4fz`WC&H(K+>WmA6W}a$dd$BRh;bjgafgnf|5#)=eTbyZx)qdGg!Kyw z=0rlV$;bwL-&gQq0NJqtI8|Nra@cc`u$xRTlV(t2tja<*j z&LcGLD)p?m+-oiND8Ce-wJI^Ul- z1ePy|<9@=07|2P^47V5597E%l7Ls0+Q;?@qGt)z&lwS+!;~yt(8`TKs7La=yU)F=> zvT^ekF&M;;r0+{rPV3!)C?f4OA63)3&Dtx1^S7RBHZ`k@E*UO<4Hqj%VKN((Q7+*U zgmT(3z~Q;2pO>Y2Z&*im4$8JR>ej0rx-Rnblrfz?jeTi zBy|)YEupct_Tou1L|4X+y%S1Fihw=iW{mwPPdLA<&HQB#c!6ty9p@EhvhX#~>N=dP?9Ax=6 zYEY+uGlj7hR*FoBr88FY7uGY2(CsI{VVoDSjPZ*fVEu!yGy_`ksF%x8l(4xy^M&^BTP^X|Jx_l|vJL<&h5|EkM4OLama zp^Logv>NIOgH7Ab0n~Gk>L$Hp4 z{EF39PI=_Y1upjL)%Y13eeL`=QmgRxKrs0f0`Q9{*t3BT#g%PA4Z%h}9Yn5upX&w! zFw*JT3fv$?VpNlAT<@?)QV#=XaO^qW@6yhqgnFh0z-G2`dm({`Yvh~AZw?GKiMAi; zReXJ2vLr9_Yomc&I;y}~0n*jE-Y~_-V|#;1Kuuj%;OmrBm~$(QpV(DZZLymWLZ{t513oa zRl6FA@5x^1=MK}s7fb3S=$XGGQ^X;M>s9REz&L8vG98+~5}2W5={e8^qb3^RFBE)S zNDsd+MP(!~`MWkJWhf$)8n9v^(CQO>{G4G9h0wp;IW@6u!LiaN?rmR)Gok3A@! z+xC79=3D(Ps~?qmzoAqa*mchf2u@2rB*?-%w0oV(@O<`@kBZqk`j*6{pLZSz5KKsB zYEpWAoPOMKzn_J7qbfMz%x=%x*e4kG1>7rQKf_Rc3`HDew|Ms4DnyQCt-Gxg-l%jr+(t(86?u)K*mlW7{ z3txANN4*%X5OEZ{6jeTaKHGiSS~wH5Gt!|KZP$=<552bT=sH}k9Z9*oi?|BHG^x1$ z?@ZwZ_|ciMR`UeFFAkOnz}dYo>@*#U0<7VB72MM$R52+Lk@XKQ_XIa)Vm{iRDUv2q zg()swAI(KeJs1MUsX?S_8{b5qe%ZV^@dskC+m3z7%FWkCukfbU=A`Vb!WGAaP=!!w zQLQRyjg2KA&Vt(ar37M)RQpr>7tLyVql39avD_+`K{5Y!AdMz|X#NFn^ z8<+AZl=G?WmAjfZaJsBU^+QO$_uuyubZ?$GQGCrdmozMnmNPx0jBVnl654YgyJZY- zDouN@6!fvyJ;Hu;9G}8IUzLvMtL=KHXH+R*@A8G1o+>)pfHRe$BJCW-x`R1JGo&V) z;1<}=|Es@+4J@VTMY#m|SE3y%xs>3TzG#~vCdD;4ce@lcuA_WuUh?+FwYGE@FkOGg z4G3^Lh{Ge^(|)Bz!)N}IYQUug&RSocBg8Pi(YNn1d8^(?iF5W*5~mJJu5qeWzJ_*! z9PO%!zsDf#i1wSpgbH^H}1mc!Cv^+Mv=p-K4CJr-sGlI zbu1crYx3btYnzM!4omZW+IH^6{jnDLNw@L}B$TWodLiq1?b1$nkoeg+*mA|Fk4#m3 zIw3AYe8zCIdCo5Z)BCSpADXthv&%T)(4|p5J2)7Xg-A)H{T{3lB({1k8=yD@>*iGY0oOvcnfy5CE96)c?G)YN46JuO553s(e` zkXPB#`&!ioy0ij}IR7eBmBjnE6^wCS|E@{6FbvtA_d+c32j+L`)k5F}r-Jtq4ywns z%Rl#svDL;W6{hyxurD0F?(d&gcXDN(ozNuZQywrM)9Yhy5JP(^xo^vI^vo9!Js}dt z6$TZvKLCsRSs@OiSbqwIPt=be94HBzR_m2FG#D6LDv&l z@M>VP)k!DY2?RwY&*znXybS-oC1aXerxW4mC&e$Ml;1mp~56U7s{Q>f%v{`Txq01ErD+lx; z7SzNyz&?1oO%h# z)Qh@&4|q9w4#Qg8N)bMbNx{?jYgwOuEzMcD^Z}=fHPhUrIPaqs_WD?_Ma!X2jjg@C z!L+eg$^~0xvy4*eR1(Y)URvs|NEqw14ESt|lzNb<$Al&y2(*MZq>ZV&KZj6=+l}E@ z6LDGG6*axWF<<0qdo1^BJ8fESQa}4Ec^71Z-HK|y`tBPeg!y9&Ghj8p*W^BcaCeNs zcp<#Qv}6*2f-6QG{8E?A$poDQ-9K9~jT4^+ z46{CQ$LtU6_D=i8OPATQ#{ViJ9kiXK%T&__-ttQU*!tDlR+17N&Vc@K*sx2~HtS|Z zZ7!s>h#N$6yzQczUyt_WrtrM=h@+1cJvT3#h0M%Ftc>v)u~-vdkGy^)Ri;X3lY3kJ z!z|Dy9NKf8e@7Ib2_tG`QZEuoSv!^sClrse!J@9@zuzbN8eV(qFr0Rx0-$1$Ls`*G z0$08^!0Ecx;xXOG%R0W^`QOHEfSyZsQbpa+bIApMY*$91VFcYlsp_d-L?2N)dIV~r{ic6zF?G4ey9!+Wo- z)1`)%@gQUud~|5$5g3Thxyea*GP_rA>%<;GC$ZTyMNBM?^|8I`WX8`1Dg=wlCI5+! zRY&KrHS^B@^8%nm3JJFbsA=cJGUTsB|NK0*fL+nVMfq1_vHo)nTN)K*X5MU^3#LDx zQN4kD1*>j>aG^!17n7n_4_4RiLsJ0>$QLtwOW6UQ2(_4*#3yy?n*`DD3^@~SRA(iR zP<)ceyUYD7N3Vyro8bGIWxQd=Xr+q%mqI#u66C$GrZ3cHmJ>)x_9c9A67&6mL<|q3 zN*3oEeHukqRKG!8TbzIVA~`8B)=}RZ-?cE0vmOthAARVH;F8}rVt?IJZS zz9J=kCDZI}?$kE+ZE_I)bMDcjuep5zL?yRZ%L|j)%)~zZn)L$hmx5(rsIXX$!+LN$ zNxZZ#e}6J|g2N4@hSGjv%#q>`5maYVf#}+_$|4;E3 zF2R~&RJKS8m8&_3+hZjVL~IFVm%tb&o6cge^*N~eR3;SfSXLC0*g@o6jePV*W0x!M zK89&|eu_V_2?#1$K9g7;QV6ug{t)!QRNdO2`sWO_1ylh3ZZ&~K^J)}DrosT3l9>vT zxD+}49EEa#3R|Jfpksr4`FmC3UiVyH!C^A{f7*ru2?}Oj$xxra!z+8q_hTsxnu@YZ zE^uu`jN|Ap#OU}5)ysyHhf#hOFaB*^stsJbqbdP?DgsQvOD7%Ed$G|@vSw5ZrLf)l zan>skd|8d<&0D7a>|QG@zg%z>uO_|VzW7IJOq(XO@;+=T(}@P5IdTHACcYmD-Rz5= z#_#B*6m2I`@c$hSf@n~EZdyj1Ga{@Y2dqyQS=_G7?jGQlf65`~5(!Xox)-Q(NK(!> z9@jQ*e&s`<5U1qt48Nd|Z4FMJxk4J{*j97M`$4c*cc=}!4&&3r96=?1t(BE>`M*^aOX+r20UF` zAN1PDmh(yBqbv9nRqmH8*0^5D1<9coAQRbxaz0h;BT>;xND3x|8SDn7r4ykNaPLPc zy`tc1pI2cYXK_}D|EB`TfzBHQ=j^`ezy;=z!X%PJyoh?A0o34T16m< z#X|S>$Masf+#~4cs^e)au6qV%L74dwt`Rh-&cX%ghC*}N-Z#fYc3#Twzc95(jZiI+ z03PQL0=xpwYQAk~nX@21Tvn?lUbK9b%?6-clzacfYisAA>X)({2;nCHv7@4Jp*E$a zdO-}T1l8MBt=ja>28l5q=gcdM;OAu9rCcx!WTG-71GU?|-W{xKSpr0<)Y+T`@Qaf| zJ=R(_f4)pw92fQ_LM^z6FaTyS$QBu=jb9xTzGTmjprg;ixx0uLz4RppUWPrs>N(Tr zTDr*FH_*{3Y+%l7=!}5GqJVt5LLB|E>l(Zy# z4sY4Iu9HM7IIPbQ6apmTg{FPz}X4F8qH6lYi3Dx~?nU-D@)jB8edYQ~H#? z({<|HA_irVyYfu}p1S~b2r9eE3os!%bR6}Y zyN}kP6%@tNX_z+!r$I7r%$Jp@4w25Ij*XRV4m~;^lBc8x|K6+!9gsiT`P@EMe^-7I zKWg-U0UbtrbI*S(SZyjTcqLQt_hLdU_JTIA!RU^-8ZA@}R+kXa0y)UOjgXi?pp+m2 zFZv+{B)z&%)co)TX^6BIM7Aw0dc2>%q_^moCfqF!yBmze$$}A|$NGC()Jlr6j`_OTLCg2X%gSTBucqYX5HAX-87Kwj zk3=jnwY^P6+?7?YB90=1<}sHdUOg;{7q#8HB(&@z2B(BL4%U?`gs=KZ#Xzl?68nXO~N9I)%h#^JYwe1n6hlu=^FPApV6owr}B?`0?W7TJvC_@fj?kl8Kr?y3R@IJ$3 zw!SWSYjY@h8UX&D5%Cv7EC$po7R8e~*L=Ws(2EMd-!N-qNG8Fx2UqQ~zGXRki^F7T z02-={PvKE0w&&L=KFoq7V`Oo&CQexBJ5#VxVd~Tl$C4}tpC)W5pF}jf;kS)N671Hj zr4{+GQvLVnvd~8d4hUmt<$DbSF3T4KQ}KbaLA__IuiABAy!V`L1+FmoDG+11kQQ=sVT66%#xdGpXIMr<70;KFM13$X-?Q z4|wX-iYUID-G*RdfZ?Y4a4ioe?)Uw@6khyK@d_Jg1eHvo@h3vRu^=C;jzg=|3m5Dc zoS<(&15W5nA?~1>LZsryfqAZ0yK?4$6d3R}VjeT<9jGcpOmg!BR+4va1pL{wMF%rY zLgwW%*-fZNO^#NPg(<1qUnFVT0Xn@R`DMihd;=L=*qdghw0fnHIO{VySU4CpsX)s* znTXYVA)wNu2ho~=M$qliw6~Fqi!}TBDKT}{DFiBOC}Tw$Z3hC@<fkl+#8SpG+edB^R^A7WxBwx9Wy&45dwvNCMy`YEQJd3k}-P2iK5jVV&21vS~< z9waUfXh>fBhMD;QpJN&qUiD*>Jtwdk=+ki>Qq)s+6C2NEq8f)0B0=%dzZz|eLN32s zVZMfdVt5jRX?ZbGkN3QuA8*(624J!qW%YF&^jNM<*4o|H-IZ+g>z(36o zoae;f7#03@t(&`a8@iQm9aMF~AKJ6BLDR;?d@gW_Rs?MYY@W}Eil$#`nDva|tOxWE z`b@}ZtD3<90!U60RyK*m$VMIDTdRrx4kc>nq*V6v5aHhw8V{zs_+S^Yg_4zFH$<|j zL&sQbWKD7Jl7~5gB(}n?%^ImKP&EP+MCm(;5)N67!8}Q+|G@} z$hZNcgaKcUh5hgUFzpY8M9CXIQ9;ih7!MrNHFV=uX`A8{I1KC7(x$oDnZw5X-e~se zX9Jg6nGBz|RdjrqBoI0^fa20{iG*#+5;!4l<0P7_n0ai|)FgxCl;&LaNWqgC`mb{# zB!m@ymL}18{p%gD)qvGX3k&Mg5xBcFvh_t(;QH{MzpZrdM27=}!2?pby_@^5{I4J3sbQR=p5 zi)u@;7;}z)z$z|Wzz^&+zS+JGM=O`bZgk3VHdzvDB$GOE(c5aKrIH&7HAgU&)Ca^N zSAH+|!##moh~cGUTdR<2c#SwGQ)NlXBaktMVlF7BStTN^_wVV6q1U!XqS#-+{stP{ z7gzy}wIEVyJaJDvq6AywF?%Lt@uJ|;_%?6S$8!2JIzFh$u-E-wx^EX64W`7Kc9J9LApyLoM==V683>FPF8bd?m=B%; z{oa#rkB1TSb>-_S{%H;T&z=5l<}&x!YDd=?OO4hVPoKY062^-_tn}JkN^0o)y(B#4 z5DEHqcGF5B!bO)F%0=D4P(UkhYMk*E%w{3_jfQ71`cVxSygOK$DutsCmyv|P)-oS( z01Wy>ewYkh{r4nz@cpJZH4=ZHN=fR)w(1m5tc9wbnw6Tn?%;Z*8y?Vln7@IFYGg$& zvB=T2GHk2c=nR3rvier(I9hd^)#ECXm;qF?$BX-e&)>vsL*Mq=0R&knhEg*U*Q7tT$m->MyWr3k&$RP4$R zej(LjI<^dPHN%vP4f)itFXqOGTaFdUn4AgxU2mOMy01O|mO1+@^i-U+WQRc2@B`R^ z-3D{2E={?`c-3+VnHzVp8(-RoP>LOWc1Vu4quJaQqmhFzktun~vRxG30KCtyqf`t+ z9zgW!oBP0Qd6REBUr)&p%L8{Q6EXo|F1=C~ZeFdBb)}!??y-oK|gokKE?D^PxE9sm(AY^ zI|U{?Jj6u_jwa;<5ZHF;Yd44mb5G<5dUP}iL76CBC~c{!@&lUMhI{t{<&-8*f9`Xi z0IT=GDiSX;1VgvCpV=vW0bSaS3#1LO8OL*z?)EYR#>nRCk|J6p$3vOYASPLV`M2x% z&dfS?#QAUn<^n|Xsz`7_&0+ym9*abW^ z+!3?UJOxB65|TDLFWIm)$fgf~DHFVSU_wNSDxx`Qi8ny2U=rQFO{P=2d@_sdKmG-P zlb`MZ@ZiUZz)598cFblbU1CYlFW(FA4Mo1SkID63=#*NO4_I28rQNf#A&pPSJHe!* zdIJs1`T3$Z*P6|I>H~!R>T?7^e{Br{dwZeZ)#-G5^zWttvW_M4;e?%6B*YJr`jw>z zk<7Y0fk>E6(I#FvRaxE2R~&tNF~8?U(q8TYA~o$9vaPLfa-*(qL-s%}^SK{1?C~04 zzl@y(_5yHir$Ke=b`<N2gV_WqpUb^ngN_KH`Jo8GM+aQ?$VMJ ztfW$roW?5Mz|Qkt^CZH*oy*g!2QYbVAa#pOcllZjj0@i0%nVb{tC?#9@@>3@zD@Qa zk#`zqVpH(O7*~5Igx0&2s1?Eq6f;Y`R1a3YZFSy(blnF)v|k0!r(i`s{C%b{M44`Yw-Fq60JEi_`KusfTEhQ3SHK@T_LdtJx#T zZtH-tAT=%;IVCRDm^c4cIn+BVGuUkYUzZ$!X*K8tr`zjQG{8<`{e?_^G*1|qvsbiW zBE72l1Eo(`>mf4s@WzBdcU%fwjp;Pv_B zI-biR6@Fu zkdP9P4(Ucx;gHfTCEZ=p-5}lF-Q6Xf(%s!4@jmeWzUzIDbr$QuI^RBfW>3%TnU?*_ ztZFBCiyP$z+afb@K7u-(@HUP~4Pr3NFybk&vPf(r>rym>Gl<)E36l#i0g)y9wcuT? z%&0D#5S}stHM8NVg7=ccTLB!*^3kv|ByWkIul1%r!W>%^peoh4BdT1R(Hp(vlmVm% zKTZFWk|G>|f^@7{T$e|oW(BV86->LlI-VaJBPftkCtvqgTgnxSxkcD{E!xDz3)C+z zeGFo|U?E1KR$U-8tOWHcXGK#fa8TeC;wp#53+oa6v!v^jB}#DimEoCU>tWW7%*->| zH{iVADA1w4eDlW7Nx4XPgED$LG)sr@!&08)J?ZC^Ut*@Yfjm!b$c8J^cy+%-He^Tt z3VbO9+`}{{D!ke$xp-H?DGCY^{>O(@f2!M1KSOPLMtdvjH$qLYwt7NK&-CQTmr-^w z9hyVUX$-SyW$u6^fBmj5jh6OSJSjiMcH78I$BPlo57A}iOA+D+wS0w*U2jX|jwF85 zFI>nBqwz_O!&72M!4o6H=DY>Is+qqlSf2{wE1|c(l0F0FNQrXJ}J|K}m338b!Ush(|HZO2o8n zX{Z@X3f1F=IBc~z%y$uvSTo58c)ege-bPF)%sKGXmQp3%(lt^*$nzUoR{rC3jXXJa z+ok{PXd4SW>}8aV9~dT{D2T>GAimmHID8o6&Jj_@=T>?ZHOh|WngF2=Fl-{PqHhVY z!XVm(MbV4Z&fQN6)mvzbW=eUu&t?YCOKU@*PS zzYh2IZLGp@>K|XMGbeFIC?!6IoKZ5il+-)x=nF*!5J@WDlS0!rkscc5yiy zWG%=P7DQ+lXrzPhPm<(`mv3$Y%z~y_*g;xtyN?;cGuA;kCc|?$$w+>P@>B#4jwXZs z=Xby8a$GpOvw;qqJw0uj7Zjy2&I?#iJn0nG`ds96`9NSo*5d*&IfNRN zfj#}zsr!219SMDggKJPyxOQjuc=FPhPT{rl5tt$9Be&&*SK@J{`W%kkiIvBGFHQ5b z_Ulws%+^+%36#2W6-Z%uoiaj-MZT!=aolMv=XvZEu>Hu4Jiqx`D0=X8~sUWIk0=&F%{x($f%@vx7!YuGd_?!snfY# zqUS9=6(>9m6X?|AGw%_2*0%`2s9^K;Po&^!^hXZd9s>AbxJnA=)Q>aEKFm_? z^Q9sBeOAIcKTc)5ge?gvg_AiH>9jGiW;gPSQ-11wkE5x+`4yr)ykL*xLKl!;{ zC*jTA?E=$~t+%$Zw_@98#pI{C9xiu&+GF$g*>a}=d~3RiI8^M5(D0rUuh_cGo~?ib zAPNlPlnP;aCVy;xm~}{KQVks0<$_I?&G`n@;TCIBuw~W zurR^ihqiho18kPTlO3djgn(-zvBl_6{5XJ*1eiw!njuVcd^p+{tITFnF{kUUN zBbUu_C{o}9u3AvZt&)h<-Wci2I16IgvM_r*Ms2}t!?JJ;5kcr?2yF^c$>>Htk4CV5 z3>t@J-APNk?LD6#%)uK1J(4MrAxWGq&=wh)=CCs3!781M_5nC}C9Uw~f{+MbsLi|I|B83?3Ju6w0@XL>2D~g?GvW zFidZ>4^sXO(zw^FaLJ!s^QBszTUX54rZVG$oPx}yHNBhQoD`zsT1D;?eB${rA`L0j zvo!tolp9nZxLt2LK4rOx^{7@vLkRR_GPlgen%bW~oR5@iIKEi}BFn0^DK-L_WxtOE z62OmeCzBBQvoiVm2K)jBY262&xPvqu0(CjLD4ks~l98A#Y6V5gPl~(mV{l9!3X&+i z4Lat$fYwH}Oj>lg;)#lXetf#un~XPJPF+-2Lb%EN*=D#0#SRz)sC!OtoHj@a&JL?j z_%yce?K%HvI@1@T_*ohIOj---|2`=Ka1=b+y4)2wpYmbTuVGj<#@MhZAHPjB0uCS0 zajx0tAYIPq<+X9NxE~)vrIYfC>lAk}+`YN$DCl!x(pXM4CF>}Jy5hxWG&#{UU4?g2 z(xoEx$)uGs4Kr~Z`_+1n6&S1!Ej{WQ--p;&)*Cf{8wfxU4CV<1y@EolzfphzPRuqd zgqTheL9+VcT@3S3|IbDTs|!55sTuR`L7=wf5EGxG@EUy3KeY$U*Y2m`+H!JLPDU2QAmbU` z4U@n<(kJ{` zViJ~>wopchSW~ZU3*48@k@JXxPf>_^0a^)U99U9bs8~7;gbPPlz*7A9ILCRmTwA>NgP;(y z)}4^we2L=lSF>N>Td{NsBjJdHccjDO)t|a#F}6Z8DYFDEC@IKKW}?dq7^Cw$KlP(e z+jobMj8^Lmlw$^P3duy(mJsrLaPoUV`gtpEId5GYxZaN-T0<;A)}N^5{aUoU`sGy8 zcGYBc`%0wdX&$vd0ug))8AeBxIDqBL!olw5s4Bfim-TYO z5yHaLhi<7kPd-7wuu5rVxRV|>>;-HXA1^td*7&d_N`naaTRw0XkmmkOnFlg8yQvFe zb^_7<9gv5Dvqkr;wP?tmWMTctZ<=iSZbU}_`!iGTo!{ZN&lVy$9`R-PkSJTLAR|E{ zzf3`)Ur6=CT9bSA@qXisl&01a@zcl}zrwi?!h!F50eh|w{)*-PX1~-7_`bIzp)i_= z5)KY^7cjVpd=r|xuYv1`m6iSdpE$df@%*CVZ#i7#f@+wVIzi16N>n3^r2)$j!{f+o zhg>6m+ZHz*TPKt|#N3LVOCj*TAVY))c*zk?}ax}QoG2khA^ByfxivgfF#6R zo^Q}()T)(OP8}|tkBW|to7@a2md%S{p}=Pz^8wR>C|g!CTsErQf%&yNDpjJ|OdZYf zawxkr4XS|UbBd#YFJep<)%QN{GYpv$BUemXCF6r@6~Wq$X6lbQ83xStQ+m@O_?Gv( zRi;HO*pC_y8yfw<^>)nsZ~s85fx5lwAg^KLe-QDEcpV(D`QA-x{gjg2vq465L1VBrD)97HYPEM^?|y!ZNWjPkgDHtdf( z_tY@59c7H;@lTdWZ7EnuM6EP_DT%WH`b11)!fz-*wgko%jmDwfl`QG$Ev z(th(KTI4C7=i_SSBjnS1k21vABl>(+iGJ?6tzz#rfKY1b%uXL4kS#T#pr8o%ghuWM z8W>T`)tDhK(F5(=)rXR~jV2#X2p-E+>nut0{hyjMfb&}`VVx52IM0j~&$r;}V!Efg zhwH6QP?Q@kD95qyF^JiH0q1~B&z38a?CKIKcRWy5DmRXse7Uj`1rl6^j1tQg3Ad(e zx2)TsYbJJ*%Bh!|9a@t#j`%2>{jSB9-I?Bzd+_GHJ}E1mLi0t^BZWu^UKt~B@4h~f z!=}IeaPJ8r>z4;}mdmYRb=Er(LLH9GUpir8NGTqH5dbWRNL$)_Q+}deVR7j$UF>`+ z<|wJIzFg)6&d2Vm4YnZQo|7@1WLL3`^)u-nK-PAX%?;D{074L;V?)D6p<}13!|08H zn7J8OAo(1NU1zf=AKJ4^*PuIqSsLPgr1P&~O&!g9^g4-})g_lfhW6w}UK%7>k!+VL$@f*67zeyucWm8wr>yFzeK z82$AiT%99{s?+_SBt`^oT$?kNm4|AE!K1{AuhurC35aSgp~898v_-zQNX_xJM;XXw z?aE{^Z4Vg?5%GGB&GxYNM)YjqWy_{fX zcA#Sxx&c5_VxIXh=l^3gLnNU!p3|=Q?rAdI-CWCkff{CQ$Y&58VPV zrYK#FW5czq~Z3~ z@iFb-5)&g0TH>AS8txJdnT-<{5I2l=>{h${aTNS3Se}PVNuNJS z8$zllh@x|%J&6H`^uU3kNFj~K?eG-1#MSz?hd`Pa6S&mXLUC=qttuV7TlkU#=YUZH96&~ zo?m!aObix@e9q|(N3vjILI~!Mrw*OHF+hSslPUBW0wWly8J)qrbw1#PfaKuQU{Er{ z)3dXzeBinle=AU#K_|Lb)bWb47Qf!!4G2Rw717GPnFWV~CcvO3v;44{U29K|rn|5i zOvE2)#KRP(ce$F#!XM>*vY{e}o0AjpFyiV6;~5Ro2zfWVSp@<3r7qRe1`$E1rw zB-4|UeOFQPqw>_E*uRzsa~FEyso+Uzg5a)=05Z~E{K?*V8%73LBL?6DhR+DahfIvk zD=2_h2vw^urBa~Q{~j*Y4z#F4r4sv5+uhxr`*O>^2QiziD`9iJWPRwS|9GWbj*8~) zb2wAH<>8}t zw-YQkBDXVExABi$nhknerTCXXqQIuYYlIArmdN{os-%(F?LxtgR3!Ax!9>i{C`Afm zf4L_Ugzxb!V7&4U!#fFqzomZxyDSv9z%GvAc|6nTQ1SWm=U!lB+&WgvwYT#Y=aPTD zK{B(^cTL? zh@mR+n@n6FEe|J|tt)HR2m)>0HRR)Ga03z&5-LKWLdhwl3!Z^wixhw`;oBL z{~HyO82rQgjTaX$WP|X1on2ZtVd1Yw6JQkCqpBIxa0Ikk-oZ}lTzFYJfcQ#h+*TBi zuuqC*2G%CSdb@$9wAg?^e=;A90M>SKftulYHv1^tU!$Kl(U+-;a`B1V6AVIXY4v3D zw`URKK<)JUW`=Q<OwN!2Ae3s+{oS15d`U=x>_OAH%wO15N{fZ&&+C_x#BFBJwOa&tN(e zLiE6e<-EwrK7(2vcH28&Hh(Bfds`F!4a;Z>6W&MAp8~BU3jLjWv^s8hJ(HJh;ic5i zkunAS2C|xgNcb3)hP&U#){6%qBF?IKM)rBjY~UxhA{Fkjso#doS4oIv#1pTlXTO3; z_Sgec-aZe(0-VcNyZk7{L*>=JXi-a}z!HTlkMpR%IRpE;Cm#RV33QkE)~=VT0fxu> zLP}*`jeY(rkgpL0dG`Slyt|NsOwifmt}^w^kHOwEUc{(tc`Z!?wH}(F{Tn)$qBw0fcyI1i^(f<{ttBOC(v!0XH@yqA`FsfnBU>Cmq>$>E}{B-4=kEw zYHS$)&uhbOESNGsV@IpdwJje z@N3bTh&1D{H<%pC5*@MwJq5W+wA&>AbEMHyOZ(=ndXgibM7%I+E0Tet+1Wr7XV$8r zTSH21BZF2JS6M}^0zTn)%5EcwpSU5bUsEqh-onW}v`WyTW37fRxbe&~n-kiP9 zas^lirMFID8W>Q2gv@p62}Hx3uE}=Lgr%r`&M6U-xbM%6SQo3ty1x zj!ZgEfp}t=Of`g*O?pk~YpOZRum-Wpw6Xcm?WbJ=Q4JDsZ*Ondi|qPr z3Cn{eKh@!!(vN<)?|*yBneMGBPIjHi$=N0j#KJi-{Ec3npvu-Vanv$&6gD#Z4>&!A zAL3ok?sUhdrYO~#HOLXybfSNw+8;f&^kX81)o&;M{5|;6{Rwh8zk& z$mXSrRq2>84O_Osk93l;v1_Sh)%pkzGVt$2PlU8x^CYki^0a!M1kE={G@@@i25lFt z#fkk1?+QSI6ZY*r=q&Mbuy~4Qr&d`_S#m5is>1whd}HKKq6h(S93#QV{ndVp@a<&2 z7;tDzY;yGv&5tv5<}9)!*2oF$PfMo~07tjuOYW`qj|66SKZKN^E&!RTCz~wXB_6g4 zKS!C~hQ$FpVmxasoBj>s0*a_LbQMj(v{g=psUlWe51wNYI&i405KY&XpUi)GO!N2)+MuzTVe=@y+^`3T-AVz$l z>{RCe^8h2bgt(^SgSm=|@Al)^>=f<6ZqC@wuV}zfQaGKM4yNiDg2g%S@b2*EMv$60 zN5KpHO-jG@WEfvI$}#+FET5$@DE@JxE}@rBBq~wC$hif)m4FT5|rO+2+6t! z;KICaNj>p(8fWtcnQfO*KT+$S*SQtAL~m*WEyAOgnD6@5)Rpr5y~yDh1zN;<cP^iVu-+NV@Q2&{f&b|ZA1^V=^l920t+v?K=OfqeKSoBYO{j`o z{5MuFx#jgV@a%-n+BCzSsqnWL{RUa?|4kpmU(twZ!psK?m0pTXy~XiN0v8B}4d&^J z{ARO%eiH^me&!YI6vUbPSZcT@hF1XckQ3C+=puuIM*jPQoUrGD6L{RN{hD~3u8as9 zR4q3`@FXs2;C+ z%zWO{snXNoT?XO^n!22{_@RGT5m$p$)!M|2PW zbqY^ho+$J-Zc$+Qx`?H%9EAym2YzeVpTg1OW&t?4)&A~NgED_1Z;RhT;LmR@a1w`2D@XXG;aj1KRNBhtDW|E%&% zpze^4j0Z-e9(5K)Ol2r<6P6}NBb)2WT~pe-B|WwNA~QnwAi$f549^KpdNLaRyxh;x zT4&>Qs?8)=-140ywIU7E3!k0YKRYS+;ww)8f1AJ?9a~GKOlk1j_5HI#FC+NOs~204`h_N!eSj@dcR%!~}R<(OzBv0Q<{!9my!ZL)ts51_$aM5MI|3#$1F z)nMAm#cOVEE-Q;$vR@d%!5TkcROX_|k)qcma(-U5udgqB9`E|g3cn|m5^Sg4M!wN* zrE|#lKIRn6gyOFZ!H`gF?%mnG9+K(B&1urRxVY$prZ-aASy^&#SZYKCv}J#ko0uHP z{7NO#Q+5l0EO4qqPOr~=^yyu2s$yx*_2S{ktLiSFrJzK!3R##CI!u}p!!2w%cBm8!or;hOLbTb{vHP*E`J zl9n_wGWwCFFR_DEYq&{7Lo>ep~V%hF4=*Ikt$iT=X zQb0s<;Jy{nweb@Y0Vm0{=>q2b^DU8`JLxQq4-7UZVQ`bQ(TI=bxeuc;3QP1z!$ zh7{BfCJvisIetF&S-7#lA8}hxK!!H3aOjHCw_jXHtE<4;(&QN9X5qe;CpzjG%K{q39b3HJZ!)TydXRO@7C7xQAr?mS)KCS|b zb^r_mvrEWRXR!Pwqw&{HRdtJ<0AO_$mST0vlsCL2x+EgK>#*AG7t4CsCh16(Eh1(S zbn4BN8@eRA8>@AeM-LF}j=QS0ZdVtZj?--FG_y<5EKdx488_)}|4#>V0OL`w1_{QH{>%ysfE} z>5wgfM-I)yon{gmUAB?2K07#PdB2IT)ciFBwi8}?I#xQX+I zS_}>tLAbOww_dId<*kGJ+Op*R{iJ6ZvmRO5a%P2Q^UVd$reYThPT*917`4jzoq1caI?sf~P8BKMTj?gXhzQ9GP1+=>OA{xY zbFs(d8|}^PoLR1lXBEhA4#ww;>)Y0Me-iVd3jEdon7Wbl-YQ_z>4)G)yTtZrXmBA% z8d?>4PCWR-TKP{t$jpbL<_Kb9J|Dv$Y~{C^A?-Aj%$&AJDk_Uq%0#WlgeS~eA90(C zkg<5?&;0MJw}z8x;kWFkgA|4#UUTS_PQDIhM!O>5DZa-cv$C0QS-dGL)Tk5nd4;9I z?%Y)2k`jc?@|kw0BP?#5tbgpLVjqV~!=cM{ytWOjL}{G7uZ@KKDPDAJ_i|h=d7-ku z8?QL%Nf5n3?VVhDUD)=p=L5m1I$jK5I#|q_uJEC&<94grUj8@l*Oq zczKebE7s)4MDbCcl)T)^Y>)l>@%AvS>(Vw##{7fsSK!C}Hp4Pr$L39OOga1XZ_bfT zH1kJ=Tvi{(wo<~pIX18C@XL*%<;(|VwXWK~2V2UT+0&^uuSO%gXvn~WL%udGr;56f z-BX}kf(54<+DcK>w@HFif;WG&9FojY!dlg_E>tuQ;x-=L0il%FW}Bb6u3aWc!6##t zxIKuoP1_)XPBk=UiDk({Wy5V55)<={j25-WH-M=z15-IuJ2!^m{**)7YT941zt~)q z-`GA7-Vs`(t-Lz4Cj7Ry>H%l%9753{reNA{jZsqTdYqaHx*wKEjCs7<7gkFBvK|%E z0-7FdU%_)TU8DR30$9*EXX#r@o~MXJANp;B)5%%FMSO$KxS-lCL=zd2YQq;7MFN)P z#-TWdu7H&*snqt)BTWOGwDud;WH%WCrU{>6*4w+gaol}~lVFNSL`Mk=?&YJlb=VC< zjQn$jE+9kBhYYj4!XIKSTJdmjNab5S>ib#AaGovwakf_RIgWl&&%@%#=Zv54$;2inaVhQPXCoE-e5)^6(1{+(YtEr;=3~PRF(@jB^)N*7 z9X)L|a`NwYGwx3-7gN~-VNLV3*|`jSw%f)R+27}U3RfmN&U29}k+n;ohA~#Hn1`GS zkK9^+@Pwueiq|RSIj}93p?R^Pn{`=wdl6^j3P}80QtLH2f%1v1sz?-y`ykSc|BFLBXfTS{0UgQwdiLj@qgwJEd=L ziX>yzYm|!sVo*iz31L}bb)0~ySmuWe89Pyv+e=>J*IdC{b^bACw3?_~TAYE8(NT)l z<{r4j&-e0|?~ZG&zfXmc*e@R0qEFW%XsnaL!N?oJHcWGi>MHi-umx?&3(z`w%2^{z ziqqIr`26PW%22FoU2h6~vf_EACFDo0CTFMew|cbwZQi5EzjSa|!9#&Z?}?6!w(>|0 z3?~ux8YkQB@X~TTK*Hxz%=su>q75`4)A?Gz16KvN+V-LtzP3oRI1*1S3fH<;!lSSx zSE%9x4XvGA?%icfas@QbiEkU?P1SUHk;(KgUf^_n6y*QBXXC}= zrasqE*IY0qqZ%_a0b^SH;M4X7S%{wddkEmf`a+&-xmy{Qj51f!7-og?LbPpwd_$|P zs*vmDzA13uPTdTH#z5m=BAFO53Eka6%lrbK3tV45q4Jb|TZUr!-a$*6MJjOMna5Py z2ISe<<`o4RA@Ms!wD{MNi_l-w3>L9)?;V%cE43Ucmekix;ZJUF+ML0v(Ab0kVR)D6KR`VjY z`uOp-`Fm_C)sRKS_B0Li!$evYHkBf=MWzbh!9@oj>;w)9Moh&Na|m9+mk4-X2zbd5 zNT*4>ir&CioiTKw3~d;VI0gg|Z}q_{DA3A3o}T;6xtVC;WHgwXcLe1r^2Y=i!DBWz z&T~~sNL1_sG6h5lcjl4~@wyBbRW&`4y5h*lTsj<7(($T6pQU(eX&%Ns)*Q)b_Ra(o zF@UQEZ*wSE?QV1n;s>6{zU^)?>_p%aQa6tEiQ?8ytiEIlwTN}Tz5=a+P{1Blv72OW z)y{1tviL-hv^!5No8`mlSrd1# zbv#G|4J)t7VeFvWvYy@k92b6P?D#2ULsat{8aA(9CCE*QO+S06CB=Z1xHb-vL!7xo zRz9XgFoz$6!#bP%KyqZNma&%1_iJFak30Kt*$11o&8(?rAYxzwZF#Eb^L9N3Tc)<5 zI2WshbKSx+3BKgFzyLUL`ep2UPtuq2QNi_7`lr_ndhC4hbtCsnud3jJM{E$Vp{a>y z;^2^oY2JOJ=5Nvb*ghMZV0S3uPs$bDoIeH2CeGbak6zeEF~Q7fFN5T3gKlmQ9!g=N z=yp6GxwlcS+^|~aD+GO?kn6mnNy_26>2ZPO!ee{u0ZJ(E#MaoRGyNnDogAW3r%uyV zPnQ0sn~-BhsOyTS z5&U>NUPE9%;`gZ3y@M+63v%+Pz3i&+3(m4)20y+;jr~_XxE6|RWI@4&5b&1+Zu65i z8^h2An2=FcibiY2GrDf|pe~amsaCzJKFkat6eA2^qj82-ygb zH&xm8?J8%x2}5P(Q)zx|_KsGsw7W3yuibax;>XO`s}=W>;A06q`*qHcr7(Dsc}c&< zrpRp!2kjkXu}IePc(RL@H@9bLj(qTMgpKAyTvGbPR9L-Jeh|9?cT2i&;eVXbz3Ywq zxQ6v}0zH!*8vX@jtE5|1hgVNOsg+v9&7J~nHHAT~|7^~9WhrbMwaX{G0gz0Yr34N6 zj5OSMElaV|m!Eg{9iUk{-g)g0(5!hm!wR#jHw{-u19@jL*74)7)b?FPhjv#toNR0W zwvv4Jcpk1=>n4vNA2%=JchNf`z zg?`=Pl7jah_1i%y){kTZBbP5_$koWMif0~|-O-`dxFEj@d!$upS!Y6G3zB-(X|c2= zu}xmGqwNqy`~1*6sbTJm+RLqMIf&7!x0U=K8XdK}vIDfU44Qux%GUJ~%=ea|wv?$_Ec7qNBUy)8?^7{R&EJ+Mpl+U zPI&dsQZP8hL<>RQqSOma*TTHE^Y`~FPO>BCORV}>h8w;AOq>~s4L~L-M`e<;r;=+=Khnq zgH|BZwleKig8+vs1mZPKK1{ofFEn}HE$*^eiWVC7JIG^B56>f)4_f!rgAc(1^$$n) zPQHCww;tkELu*$lpL~6(@$0i$L}o8Cik6oK!%F$Fky!{WkNF1AtR^f~urYbmE=U0^ zPRuh~PZEytIsHp&bkjPV-vYv)<8BO{-~^Xkip#s$|cQy9)|+p-yocw|{w7QYYDw zxNz+PY`Wpm&es_et9*aCUaZF06dIIw)&$De}NbPbsD1k3+TL4e}6r2p6yHar4qcw&)x8ppkM+PUu1Q3 zGZpetc;w4?!u!the}ZWvp|FrNf%jzvubA&o3QHw_O0@bT$kIz;=?VJ>;e5wsBWEHs zCD!E{MeoDsU8mE&U^hZ7LcEyu@;({q^-;2i)rXhO-bC@#cu7;^ws#xvjPIDR|Bi`K6Td(OD+AwZ zC!+^H8%=EW9~$RGQRgHALoWw+kRAIHh!fM2QzSEU9)&mXci>Q`PEq61wn1t)fX@HsWC#3lF z2IxjW7;a~N;p03763Px(d5>>0`bEL97nV^-6(!2gOe zKIIsIOkC9aF4y0=r$15iPEtNCbSy;lzs>^4h~-8Tl8eqJ*?S61w(l?Ek{^ z|Liu5;wcHVAzqg9pY2<~uJ?d;_&<7YYNi5eD8f%qE$i%#lAZTdmLd-3YI5qA{u8YQHr);>V_0TURjgd~>64h)fjMx& z`LyKmwxrzQOz$a(2~?G_TdaCLdBJ78QXE4Gq^DmhOxBg7}<)u4E!l(_s4+8tgWJ{+r1`_?+@U5xjPn+hs*c z+)NzM-kb0a=#?6a@}aKf@mC9$Us8QN$IXtU8|7087-;_K!h+?&EOQ)C@4`pjbkdD` zI%wuP4jJ7d`4s8xW1Uy zh#?UP>D`?yII!R7k6s;nxEp?)r{s%Wp}d{0O)GBTl;`%#xB z;5+-7$!_0S(LvL@O*!6f(Ltotb#o&|qZ$N@gM*{Wf=-(o12}R2K26PKH2cf|O`zc> ziwVLUZ|EED*{PArni{+G&<$mu|81YYuV{q`LCxoTW4ieRH%HB2{4VN_?{|cm3j=&tUyjPuZ`*bek!JQY=lqa(!*tqNfDAQizfyQ(oHA< zFRdakgcxE7tMLpXu>C*<-HN$tlH?eV}T-z=Bw(rV3$7sfa9NgW}E zrkwh2>J!pZQktvX1jD~?1N@;4zDxAn;yhWJunbPZt@x#;a#4s#okbdSv58c%zKL)j zqS8(Be8B`njdsw(j8(thBt~z^twKU$;^`7-$VLmPDIfQ zf-`sHCDna%(3fwgI;i_Eyyf;b3RKj8q@!BA`|C?acwx9?v^)*;mt4<$EiZRB9vE(U zwz~>pBR3>9ZsBrrF2I~vKK?5y7S;sm(N1QP0L?eyeD7O={8id>045y?uhsKEbVbMw zIYwrznOEmp!@=D&RI1zt#uUse zf_lb^q^uIjk?~a1x?g{a##P(ay+S4+!*D|SG`LY9!(^QMW2RPFSR5O7b7FLqCEF6Ki1FMszIoi$a&UgTIX~V z|HHx1v(SFyC4~%;wa#3_SpGrQ9BBu|f{WJuUziL-gp{E)4$;UL4fx1EO6XvGrd(0p z8qesuf>%d?NkgnVPCkH#!A!c=6U+9xMzb2>wOqb~sc_YM(+A_%@AZ8UXb4DU6==h| zovQSbUca9UOlY($t7KyNIDW58HEn*CJkMq!kC_|$A&y_bw>PLq!BE*ZAgMswCTERM zNn&Rk;xA+ox*HRRjpcoft}%Vv1?ACoL`eUJC-+L^rv+%z2Azxs1ky`$xK1Ua93C0X zXz%e92`N1;JuNq%50jxo+MrKDT!o!VFzS);KC5l@RGE}{m|?Pu#pG3zFxY{lBK^0S z;!aH*CZlDQbLlGc)$;5#{cKB+KwY8WQ`aFxeYRdT!W*S8^0?wu@b&X|eBALwl(bT2 zDq;n4(oDvRpXFo~XrkM)NTn^xkn*W$`%LbwH-v{{iAi!Kq9n8@KJ;1c=HqAoN0<0z zex6~fsm_d|pr%B(RvWBj9%#Q%pK+nbJ2Xhuajsim-`uTF%!^P^46|m|rBq&C^~d$Y zi6NKY$lH8XfY|-la;L006lD3)TiV99o#!9V} z`)V!O9|Etk@~Vf*tC+Z>;GK~BJXP#gF#-d8&E3Dj)*lKYp60~MmLfmjN&15zcXwgJ zEX)KzoUPw3>_#yp))@pRUT^r8Z#nUP9{7}|tk}4t)@1TxDqg5w1;_;`6M`lq$v7gf zrm9XT2Z%=BpvNTU4*LCiqXm9fA^nyR+g4Aa?u<+_lCDsBX$xX66#oU* z@qevqQ5yFscwFlvK-@RC7pZqU{GMqs(gBhpX1TYCbe$5EzWnxwK{uUX;jnHqn> z{p*?5R+16@_U^Q1X)6&P9w!+<4u$oru&zrSxEPq4SoFQ#!rH{@&0Qg7tOBM3$1(~W zpMoSf2WrQAk^XHh>R`L`V6nXJ4qW()$AS7X-+#2)c}H1=*k6K=4_xWfw{|iyNowEU z#k2pjcOd*QDei0X26S9_GLH{{j}_E#SC7>=;`W{@OtqeMdX?0!aW9=sNyQ7yx((#pL&bWn<{|PIc)$}QEim@8r0JT( z?cJ-yu=fRX`-p$x3&7_!Y_9D|UyL&y>{NV6E~Fc(&tH22jM!yq)Yf<$abBz9tgNn= z9j+3J)AqY$8ca~>*$|c@RUju3-*sZF|4=?qCjjQ|;{)YSs;8=us`P^rf(Bv-{PDrF z8_8ys$NR>CQO7)->URY6-}cHahWo7#89;8b+z?u8E{)7A%`iHA!jdm93LYxn{|7#Z z*cVKnq$cdiaG7W4OUyj#x+`X0M8J2{dr}wun$R;38~*Ez7|hMPOgLzZ=Nn)D!us3eUYJ~%lLv(*a=l6yaRCA1 zW)lS_JUeUqRkBKi9yHLg*UR9K2}294ff8F^yZ?~tKX3TjAyXy5X*v4GslJoGH5Z@o zV)U+dVmSfE571wUzjp-h>BB4W-VP8b>JCCU_w)S^sBcG9z_s`@Fm5^=W0B7gZ3R8w z2d@f(M3)u8pYL7$+u2CvMS+3Av4)K&W5S?e8l)yPuivX7_pKl3`j1=&STdP!EV9j+ zn4A#<@qo=J7%B-Pr(iSEw6>r>R`_2A=`$V{P)c9x$CKv@J@D4Ls-~T^?wY&+em)9G K2o`_P^!PtNd`eXS literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 8e2fd72c4..0fda190cf 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -9,6 +9,7 @@ *** xref:user-guide/reports/bar-chart.adoc[Bar Chart] *** xref:user-guide/reports/pie-chart.adoc[Pie Chart] *** xref:user-guide/reports/line-chart.adoc[Line Chart] +*** xref:user-guide/reports/graph3d.adoc[3D Graph] *** xref:user-guide/reports/sunburst.adoc[Sunburst] *** xref:user-guide/reports/circle-packing.adoc[Circle Packing] *** xref:user-guide/reports/choropleth.adoc[Choropleth] diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 9ffd711f7..874366f70 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.1 username@host:/usr/share/nginx/html +scp neodash-2.4.2 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc index f07ff8276..fb02c5a94 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc @@ -5,7 +5,7 @@ For specific use-cases, these visualizations may convey information that a simpl To use advanced visualizations, enable them in the **Extensions Window**. This makes them selectable inside reports, as well as add examples to the Example window. The following visualizations are part of this extension: - +- A link:../../reports/graph3d[3D Graph] to visualize a graph in three dimensions. - A link:../../reports/sankey[Sankey Chart] to visualize flows. - Three charts to plot hierarchical data (link:../../reports/sunburst[Sunburst], link:../../reports/circle-packing[Circle Packing], link:../../reports/treemap[Treemap]) - A link:../../reports/gauge-chart[Gauge Chart] to show percentages. diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc index aabd10143..4d18523dd 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc @@ -26,7 +26,7 @@ RETURN p, a, m image::graph.png[Basic Graph] -== Virtual Graph (apoc is required) +== Virtual Graph .... MATCH (p:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(p2:Person) diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc new file mode 100644 index 000000000..31d2ef6a2 --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc @@ -0,0 +1,137 @@ += 3D Graph + +link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] + +The 3D graph report extends the default graph visualization with another dimension. +It supports most of the features & customizations for the regular (2D) graph, including rule-based styling and report actions. +Users can explore the 3D graph by zooming and panning through 3D space. + + +== Examples + +=== Basic Graph + +.... +MATCH (p:Person)-[a:ACTED_IN]->(m:Movie) +WHERE m.title = 'The Matrix' +RETURN p, a, m +.... + +image::graph3d.png[Basic 3D Graph] + +== Virtual Graph + +.... +MATCH (p:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(p2:Person) +WHERE m.title = "The Matrix" +RETURN p, p2, apoc.create.vRelationship(p, "KNOWS", {}, p2) +.... + +image::graph3dvirtual.png[Virtual 3D Graph] + +== Advanced Settings + +[width="100%",cols="12%,2%,3%,83%",options="header",] +|=== +|Name |Type |Default Value |Description +|Node Color Scheme |List |neodash |The color scheme to use for the node +labels. Colors are assigned automatically (consequitevely) to the +different labels returned by the Cypher query. + +|Node Label Color |Text |black |The color of the labels drawn on the +nodes. + +|Node Label Font Size |Number |3.5 |Size of the labels drawn on the +nodes. + +|Node Size |Number |2 |Default size of a node in the graph +visualization. This size is applied if no custom size styling is defined +and no Rule-Based styling is active. + +|Node Size Property |Text |size |Optionally, the name of the node +property to map to the node size. This lets you define sizes on a +node-specific level, if you have a property that directly maps to the +numeric size value. + +|Node Color Property |Text |color |Optionally, the name of the node +property to map to the node color. This lets you define colors on a +node-specific level, if you have a property that directly maps to the +HTML color value. + +|Relationship Color |Text |#a0a0a0 |The color used for drawing the +relationship arrows in the visualization. + +|Relationship Width |Text |1 |The (default) width of the relationship +arrows in the visualization. + +|Relationship Label Color |Text |#a0a0a0 |The color of the labels +(relationship type) drawn next to the relationship arrows. + +|Relationship Label Font Size |Text |2.75 |The font size of the labels +(relationship type) drawn next to the relationship arrows. + +|Relationship Color Property |Text |color |Optionally, the name of the +relationship property to map to the arrow color. This lets you define +colors on a relationship-specific level, if you have a property that +directly maps to the HTML color value. + +|Relationship Width Property |Text |width |Optionally, the name of the +relationship property to map to the arrow width. This lets you define +widths on a relationship-specific level, if you have a property that +directly maps to the width value. + +|Animated Particles on Relationships |on/off |off |If enabled, draw +relationships with animated particles on them, moving in the direction +of the relationship. + +|Arrow head size |Number |3 |Use this to set the length of the arrow head, size is adjusted automatically. +If 0, no arrow will be drawn. + +|Background Color |Text |#fafafa |The background color of the +visualization. + +|Layout (experimental) |List |force-directed |tree-top-down |tree-bottom-up |tree-left-right |tree-right-left |radial | Use this to switch from +the main (force-directed) layout to one of the experimental layouts +(tree, radial). For the experimental layouts, make sure +your graph is a DAG (directed acyclic graph). + +| Graph Depth Separation | Number | 30 | Specify the level distance for the tree layout. +This setting controls the separation between different levels in the tree hierarchy. Adjusting this value impacts the overall spacing of the tree layout in your graph visualization. + +|Enable graph exploration |on/off |on |Enables basic exploration functionality for the graph. Exploration can be done by right clicking on a node, and choosing 'Expand' to choose a type to traverse. Data is retrieved real-time and not cached in the visualization. + +|Enable graph editing |on/off |off |Enables editing of nodes and relationships in the graph from the right-click context menu. In addition, lets users create new relationships with existing types/property keys as present in the database. + +|Show pop-up on Hover |on/off |on |if enabled, shows a pop-up when a +user hovers over one of the nodes/relationships in the visualization. +The pop-up contains the label and properties of the node/relationship. + +|Show properties on Click |on/off |on |if enabled, opens up a window +when a user clicks on one of the nodes/relationships in the +visualization. The window contains the label and properties of the +node/relationship. + +|Drilldown Link |Text (URL) |(no value) |Specifying a URL here will +display a floating button on the top right of the visualization. This +button can be used to drilldown into a different tool (e.g. Bloom) so +that the graph can be explored further. Dynamic Dashboard Parameters +(e.g. $neodash_person_name) can be used in these links as well. + +|Hide Selections |on/off |off |If enabled, hides the property selector +(footer of the visualization). + +|Override no data message |Text |Query returned no data. |Override the message displayed to the user when their query returns no data. + +|Auto-run query |on/off |on |when activated automatically runs the query +when the report is displayed. When set to `off', the query is displayed +and will need to be executed manually. +|Report Description |markdown text | | When specified, adds another button the report header that opens a pop-up. This pop-up contains the rendered markdown from this setting. +|=== + +== Rule-Based Styling + +Using the link:../#_rule_based_styling[Rule-Based Styling] menu, the +following style rules can be applied to the graph: + +- The background color of a node. +- The label color of a node. diff --git a/docs/modules/ROOT/pages/user-guide/reports/index.adoc b/docs/modules/ROOT/pages/user-guide/reports/index.adoc index a2879a375..da44ed606 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/index.adoc @@ -93,6 +93,7 @@ pages: - link:bar-chart[Bar Chart] - link:pie-chart[Pie Chart] - link:line-chart[Line Chart] +- link:graph3d[3D Graph] - link:sunburst[Sunburst] - link:circle-packing[Circle Packing] - link:treemap[Treemap] diff --git a/gallery/tsconfig.json b/gallery/tsconfig.json index 0a0c7d2ab..9d379a3c4 100644 --- a/gallery/tsconfig.json +++ b/gallery/tsconfig.json @@ -1,11 +1,7 @@ { "compilerOptions": { "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, @@ -20,7 +16,5 @@ "noEmit": true, "jsx": "react-jsx" }, - "include": [ - "src" - ], + "include": ["src"] } diff --git a/package.json b/package.json index ef72569b7..495aabedb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.1", + "version": "2.4.2", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" @@ -81,6 +81,7 @@ "react-cool-dimensions": "^2.0.7", "react-dom": "^17.0.2", "react-force-graph-2d": "^1.23.8", + "react-force-graph-3d": "^1.24.1", "react-gauge-chart": "^0.4.1", "react-grid-layout": "^1.3.4", "react-leaflet": "^3.2.5", @@ -97,6 +98,8 @@ "remark-gfm": "^3.0.1", "reselect": "^4.1.8", "tailwindcss": "^3.3.2", + "three": "^0.159.0", + "three-spritetext": "^1.8.1", "use-neo4j": "^0.3.13", "yaml": "^2.2.1" }, diff --git a/public/style.css b/public/style.css index 3d719f02f..5896897bf 100644 --- a/public/style.css +++ b/public/style.css @@ -95,7 +95,8 @@ } .react-resizable-handle { - bottom: 1px !important; + bottom: 4px !important; + right: -2px !important; opacity: 0.5; color: rgb(222, 222, 222); } @@ -165,7 +166,7 @@ white-space: pre; background-position: 0px -11px; padding-right: 0px !important; - margin-top: 0px !important; + margin-top: 0px; padding-left: 30px; padding-top: 0px !important; padding-bottom: 0px !important; @@ -216,7 +217,7 @@ } .card-view .MuiTablePagination-root { - margin-top: -40px; + margin-top: 0px; } @@ -253,3 +254,7 @@ display: none; } /* End Gantt chart workaround */ + +.markdown-widget a { + text-decoration: underline; +} \ No newline at end of file diff --git a/release-notes.md b/release-notes.md index 769f884e5..5546ba3cd 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,20 +1,11 @@ -## NeoDash 2.4.1 -This is a patch release following 2.4.0. It contains several new features for self-hosted (standalone) NeoDash deployments, as well as a variety of UX improvements for dashboard editors. - - -Included: -- Improvements to customizability of the bar chart (styling, legend customization, report actions). [#689](https://github.com/neo4j-labs/neodash/pull/689) -- Improved dashboard settings interface, fixed alignment for table download button. [#729](https://github.com/neo4j-labs/neodash/pull/729) -- Adjusted ordering of suggested labels/properties for parameter selectors. [#728](https://github.com/neo4j-labs/neodash/pull/728) -- Better handling of date parameters when saving/loading dashboards. [#727](https://github.com/neo4j-labs/neodash/pull/727) -- Fixed incorrect z-index issue for form creation modals. [#726](https://github.com/neo4j-labs/neodash/pull/726) -- Adjusted filtering tooltip on tables to avoid hiding result data. [#712](https://github.com/neo4j-labs/neodash/pull/712) -- Fixed uncontrolled component issue for dashboard import modal. [#711](https://github.com/neo4j-labs/neodash/pull/711) -- Adjusted font color of graph context popups to use theme colors. [#699](https://github.com/neo4j-labs/neodash/pull/699) -- Adjust sidebar database selector to only show active databases. [#698](https://github.com/neo4j-labs/neodash/pull/698) -- Incorporated logging functionality for self-hosted NeoDash deployments. [#705](https://github.com/neo4j-labs/neodash/pull/705) -- Improved dashboard management in standalone-mode deployments. [#705](https://github.com/neo4j-labs/neodash/pull/705) -- Added Docker parameter for overriding the app's logo & custom header. [#705](https://github.com/neo4j-labs/neodash/pull/705) -- Changed the dashboard 'save' action to a logical merge, rather than a delete + create, allowing to persist labels across saves. [#705](https://github.com/neo4j-labs/neodash/pull/705) -- Docker: Updated Alpine base image to mitigate CVE-2023-38039 & CVE-2023-4863. [#705](https://github.com/neo4j-labs/neodash/pull/705) +## NeoDash 2.4.2 +This is a release with a large amount of quality of life improvements, as well as some new features: +- Visualize graphs in 3D with the new 3D graph report. [#737](https://github.com/neo4j-labs/neodash/pull/737) +- Improved dashboard management sidebar and handling of drafts. [#734](https://github.com/neo4j-labs/neodash/pull/734) +- Added parameter select setting for autopopulating first selector value. [#746](https://github.com/neo4j-labs/neodash/pull/746) +- Improved UX for editing page names & dashboard titles. [#743](https://github.com/neo4j-labs/neodash/pull/743) +- Unified common settings for each report type. [#724](https://github.com/neo4j-labs/neodash/pull/724) +- Title of the browser tab NeoDash runs on is now automatically set to the dashboard name. [#708](https://github.com/neo4j-labs/neodash/pull/708) +- Fixed issue where invisible table columns were not handled correctly. [#695](https://github.com/neo4j-labs/neodash/pull/695) +- Miscellaneous bug fixes, style improvements & stability fixes. [#744](https://github.com/neo4j-labs/neodash/pull/744) diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 084d4d31b..0b556f2dc 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -150,6 +150,7 @@ export const setStandaloneEnabled = ( standaloneDashboardURL: string, standaloneUsername: string, standalonePassword: string, + standalonePasswordWarningHidden: boolean, standaloneAllowLoad: boolean, standaloneLoadFromOtherDatabases: boolean, standaloneMultiDatabase: boolean, @@ -167,6 +168,7 @@ export const setStandaloneEnabled = ( standaloneDashboardURL, standaloneUsername, standalonePassword, + standalonePasswordWarningHidden, standaloneAllowLoad, standaloneLoadFromOtherDatabases, standaloneMultiDatabase, diff --git a/src/application/ApplicationReducer.ts b/src/application/ApplicationReducer.ts index 9c6f81068..6172d2709 100644 --- a/src/application/ApplicationReducer.ts +++ b/src/application/ApplicationReducer.ts @@ -195,6 +195,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa standaloneDashboardURL, standaloneUsername, standalonePassword, + standalonePasswordWarningHidden, standaloneAllowLoad, standaloneLoadFromOtherDatabases, standaloneMultiDatabase, @@ -211,6 +212,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa standaloneDashboardURL: standaloneDashboardURL, standaloneUsername: standaloneUsername, standalonePassword: standalonePassword, + standalonePasswordWarningHidden: standalonePasswordWarningHidden, standaloneAllowLoad: standaloneAllowLoad, standaloneLoadFromOtherDatabases: standaloneLoadFromOtherDatabases, standaloneMultiDatabase: standaloneMultiDatabase, diff --git a/src/application/ApplicationSelectors.ts b/src/application/ApplicationSelectors.ts index b4912a9b9..4986ff564 100644 --- a/src/application/ApplicationSelectors.ts +++ b/src/application/ApplicationSelectors.ts @@ -94,6 +94,7 @@ export const applicationGetStandaloneSettings = (state: any) => { standaloneDashboardURL: state.application.standaloneDashboardURL, standaloneUsername: state.application.standaloneUsername, standalonePassword: state.application.standalonePassword, + standalonePasswordWarningHidden: state.application.standalonePasswordWarningHidden, standaloneAllowLoad: state.application.standaloneAllowLoad, standaloneLoadFromOtherDatabases: state.application.standaloneLoadFromOtherDatabases, standaloneMultiDatabase: state.application.standaloneMultiDatabase, diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index 42d625d3e..fc880fd3a 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -87,10 +87,9 @@ export const createConnectionThunk = 'ERR - connect to DB', database, '', - `Error while trying to establish connection to Neo4j DB in ${ - neodashMode - } mode at ${ - Date(Date.now()).substring(0, 33)}` + `Error while trying to establish connection to Neo4j DB in ${neodashMode} mode at ${Date( + Date.now() + ).substring(0, 33)}` ) ); } @@ -113,11 +112,10 @@ export const createConnectionThunk = 'INF - connect to DB', database, '', - `${username - } established connection to Neo4j DB in ${ - neodashMode - } mode at ${ - Date(Date.now()).substring(0, 33)}` + `${username} established connection to Neo4j DB in ${neodashMode} mode at ${Date(Date.now()).substring( + 0, + 33 + )}` ) ); } @@ -261,26 +259,42 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { const skipConfirmation = urlParams.get('skipConfirmation') == 'Yes'; const dashboardDatabase = urlParams.get('dashboardDatabase'); + dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); if (urlParams.get('credentials')) { + setWelcomeScreenOpen(false); const connection = decodeURIComponent(urlParams.get('credentials')); const protocol = connection.split('://')[0]; const username = connection.split('://')[1].split(':')[0]; const password = connection.split('://')[1].split(':')[1].split('@')[0]; - const database = connection.split('@')[1].split(':')[0]; const url = connection.split('@')[1].split(':')[1]; const port = connection.split('@')[1].split(':')[2]; - if (url == password) { - // Special case where a connect link is generated without a password. - // Here, the format is parsed incorrectly and we open the connection window instead. - - dispatch(resetShareDetails()); - dispatch(setConnectionProperties(protocol, url, port, database, username.split('@')[0], '')); - dispatch(setWelcomeScreenOpen(false)); - dispatch(setConnectionModalOpen(true)); - // window.history.pushState({}, document.title, "/"); - return; - } + // if (url == password) { + // // Special case where a connect link is generated without a password. + // // Here, the format is parsed incorrectly and we open the connection window instead. + // dispatch(setConnectionProperties(protocol, url, port, database, username.split('@')[0], '')); + // dispatch( + // setShareDetailsFromUrl( + // type, + // id, + // standalone, + // protocol, + // url, + // port, + // database, + // username.split('@')[0], + // '', + // dashboardDatabase, + // true + // ) + // ); + // setDashboardToLoadAfterConnecting(id); + // window.history.pushState({}, document.title, window.location.pathname); + // dispatch(setConnectionModalOpen(true)); + // dispatch(setWelcomeScreenOpen(false)); + // // window.history.pushState({}, document.title, "/"); + // return; + // } dispatch(setConnectionModalOpen(false)); dispatch( @@ -450,6 +464,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standaloneDashboardURL, config.standaloneUsername, config.standalonePassword, + config.standalonePasswordWarningHidden, config.standaloneAllowLoad, config.standaloneLoadFromOtherDatabases, config.standaloneMultiDatabase, @@ -607,7 +622,6 @@ export const initializeApplicationAsStandaloneThunk = (config, paramsToSetAfterConnecting) => (dispatch: any, getState: any) => { const clearNotificationAfterLoad = true; const state = getState(); - // If we are running in standalone mode, auto-set the connection details that are configured. dispatch( setConnectionProperties( @@ -650,4 +664,5 @@ export const initializeApplicationAsStandaloneThunk = } else { dispatch(setConnectionModalOpen(true)); } + dispatch(handleSharedDashboardsThunk()); }; diff --git a/src/application/logging/LoggingThunk.ts b/src/application/logging/LoggingThunk.ts index e9c208567..6bdd662ca 100644 --- a/src/application/logging/LoggingThunk.ts +++ b/src/application/logging/LoggingThunk.ts @@ -33,13 +33,13 @@ export const createLogThunk = () => {}, (records) => { if (records && records[0] && records[0]._fields && records[0]._fields[0] && records[0]._fields[0] == uuid) { - console.log(`log created: ${ uuid}`); + console.log(`log created: ${uuid}`); } else { // we only show error notification one time const state = getState(); const loggingSettings = applicationGetLoggingSettings(state); let LogErrorNotificationNum = Number(loggingSettings.logErrorNotification); - console.log(`Error creating log for ${ (LogErrorNotificationNum - 4) * -1 } times`); + console.log(`Error creating log for ${(LogErrorNotificationNum - 4) * -1} times`); if (LogErrorNotificationNum > 0) { dispatch( createNotificationThunk( @@ -60,7 +60,7 @@ export const createLogThunk = const state = getState(); const loggingSettings = applicationGetLoggingSettings(state); let LogErrorNotificationNum = Number(loggingSettings.logErrorNotification); - console.log(`Error creating log for ${ (LogErrorNotificationNum - 4) * -1 } times`); + console.log(`Error creating log for ${(LogErrorNotificationNum - 4) * -1} times`); if (LogErrorNotificationNum > 0) { dispatch( createNotificationThunk( diff --git a/src/card/Card.tsx b/src/card/Card.tsx index fe6ffe0d9..2a7753c6e 100644 --- a/src/card/Card.tsx +++ b/src/card/Card.tsx @@ -209,7 +209,7 @@ const NeoCard = ({ if (expanded) { return ( - {component} + {component} ); } diff --git a/src/card/settings/CardSettings.tsx b/src/card/settings/CardSettings.tsx index e51b32991..85962fe26 100644 --- a/src/card/settings/CardSettings.tsx +++ b/src/card/settings/CardSettings.tsx @@ -36,7 +36,7 @@ const NeoCardSettings = ({ expanded, onToggleCardExpand, }) => { - const reportHeight = heightPx - CARD_HEADER_HEIGHT + 24; + const reportHeight = heightPx - CARD_HEADER_HEIGHT + 19; const cardSettingsHeader = ( { - const reportHeight = heightPx - CARD_FOOTER_HEIGHT - CARD_HEADER_HEIGHT + 22; + const reportHeight = heightPx - CARD_FOOTER_HEIGHT - CARD_HEADER_HEIGHT + 20; const cardHeight = heightPx - CARD_FOOTER_HEIGHT + 23; const ref = React.useRef(); @@ -137,10 +137,10 @@ const NeoCardView = ({ const localParameters = { ...getLocalParameters(query), ...getLocalParameters(settings.drilldownLink) }; const reportTypes = getReportTypes(extensions); - const withoutFooter = - reportTypes[type] && reportTypes[type].withoutFooter - ? reportTypes[type].withoutFooter - : (reportTypes[type] && !reportTypes[type].selection) || (settings && settings.hideSelections); + const reportTypeHasNoFooter = reportTypes[type] && reportTypes[type].withoutFooter; + const withoutFooter = reportTypeHasNoFooter + ? reportTypes[type].withoutFooter + : (reportTypes[type] && !reportTypes[type].selection) || (settings && settings.hideSelections); const getGlobalParameter = (key: string): unknown => { return globalParameters ? globalParameters[key] : undefined; @@ -170,13 +170,13 @@ const NeoCardView = ({ paddingRight: '0px', paddingTop: '0px', width: '100%', - marginTop: '-3px', + marginTop: '-9px', height: expanded ? withoutFooter ? '100%' : `calc(100% - ${CARD_FOOTER_HEIGHT}px)` : withoutFooter - ? `${reportHeight + CARD_FOOTER_HEIGHT}px` + ? `${reportHeight + CARD_FOOTER_HEIGHT - (reportTypeHasNoFooter ? 0 : 20)}px` : `${reportHeight}px`, overflow: 'auto', }; diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index d6c011395..d5167d19b 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -219,7 +219,7 @@ export function replaceDashboardParameters(str, parameters) { let param = _.replace(`$`, '').trim(); let val = parameters?.[param] || null; let type = getRecordType(val); - let valueRender = type === 'string' ? val : RenderSubValue(val); + let valueRender = type === 'string' || type == 'link' ? val : RenderSubValue(val); return valueRender; }; @@ -406,6 +406,9 @@ export const isEmptyObject = (obj: object) => { * @returns True if it's an object castable to date */ export function isCastableToNeo4jDate(value: object) { + if (value == null || value == undefined) { + return false; + } let keys = Object.keys(value); return keys.length == 3 && keys.includes('day') && keys.includes('month') && keys.includes('year'); } diff --git a/src/chart/bar/BarChart.tsx b/src/chart/bar/BarChart.tsx index 397355e97..4d754c399 100644 --- a/src/chart/bar/BarChart.tsx +++ b/src/chart/bar/BarChart.tsx @@ -21,7 +21,7 @@ const NeoBarChart = (props: ChartProps) => { const customDimensions = settings.customDimensions ? settings.customDimensions : false; const legendWidth = settings.legendWidth ? settings.legendWidth : 128; const marginTop = settings.marginTop ? settings.marginTop : 24; - const marginBottom = settings.marginBottom ? settings.marginBottom : 60; + const marginBottom = settings.marginBottom ? settings.marginBottom : 30; const legend = settings.legend ? settings.legend : false; const labelRotation = settings.labelRotation != undefined ? settings.labelRotation : 45; const barWidth = settings.barWidth ? settings.barWidth : 10; @@ -111,10 +111,9 @@ const NeoBarChart = (props: ChartProps) => { if (legendPosition === 'Horizontal') { // Calculate margin based on whether the legend is shown return showLegend ? legendWidth * 0.3 + marginBottom + 50 : legendWidth * 0.3 + marginBottom; - } - // Return the default marginBottom if legendPosition is not 'Horizontal' - return marginBottom; - + } + // Return the default marginBottom if legendPosition is not 'Horizontal' + return marginBottom; } // Using the function in your code @@ -316,33 +315,32 @@ const NeoBarChart = (props: ChartProps) => { ], }, ]; - } - // Vertical legend - return [ - { - dataFrom: 'keys', - anchor: 'bottom-right', - direction: 'column', - justify: false, - translateX: legendWidth + 10, - translateY: 0, - itemsSpacing: 1, - itemWidth: legendWidth, - itemHeight: 20, - itemDirection: 'left-to-right', - itemOpacity: 0.85, - symbolSize: 15, - effects: [ - { - on: 'hover', - style: { - itemOpacity: 1, - }, + } + // Vertical legend + return [ + { + dataFrom: 'keys', + anchor: 'bottom-right', + direction: 'column', + justify: false, + translateX: legendWidth + 10, + translateY: 0, + itemsSpacing: 1, + itemWidth: legendWidth, + itemHeight: 20, + itemDirection: 'left-to-right', + itemOpacity: 0.85, + symbolSize: 15, + effects: [ + { + on: 'hover', + style: { + itemOpacity: 1, }, - ], - }, - ]; - + }, + ], + }, + ]; }; // Height of each legend item diff --git a/src/chart/bar/util.ts b/src/chart/bar/util.ts index 0608c9b93..9f44f357a 100644 --- a/src/chart/bar/util.ts +++ b/src/chart/bar/util.ts @@ -11,7 +11,7 @@ export function getOriginalRecordForNivoClickEvent(e, records, selection) { // TODO - rewrite this to be more optimal (using list comprehensions, etc.) const usesGroups = Object.keys(e.data).length > 2; const group = e.id; - const {value} = e; + const { value } = e; const category = e.indexValue; // Go through all records and find the first record `r` where the event's values match exactly. @@ -34,12 +34,12 @@ export function getOriginalRecordForNivoClickEvent(e, records, selection) { return dict; } } else if (recordCategory == category && recordValue == value) { - const dict = {}; - for (const i in Object.keys(r._fieldLookup)) { - const key = Object.keys(r._fieldLookup)[i]; - dict[key] = r._fields[r._fieldLookup[key]]; - } - return dict; + const dict = {}; + for (const i in Object.keys(r._fieldLookup)) { + const key = Object.keys(r._fieldLookup)[i]; + dict[key] = r._fields[r._fieldLookup[key]]; } + return dict; + } } } diff --git a/src/chart/graph/GraphChart.tsx b/src/chart/graph/GraphChart.tsx index 782068f22..ee404757b 100644 --- a/src/chart/graph/GraphChart.tsx +++ b/src/chart/graph/GraphChart.tsx @@ -21,18 +21,27 @@ import { getSettings } from '../SettingsUtils'; import { getPageNumbersAndNamesList } from '../../extensions/advancedcharts/Utils'; import { CloudArrowDownIconOutline } from '@neo4j-ndl/react/icons'; +export interface GraphChartProps extends ChartProps { + lockable?: boolean; + component?: any; +} + +const DEFAULT_VISUALIZATION_COMPONENT = NeoGraphChartVisualization2D; + /** * Draws graph data using a force-directed-graph visualization. * This visualization is powered by `react-force-graph`. * See https://github.com/vasturiano/react-force-graph for examples on customization. */ -const NeoGraphChart = (props: ChartProps) => { +const NeoGraphChart = (props: GraphChartProps) => { if (props.records == null || props.records.length == 0 || props.records[0].keys == null) { return <>No data, re-run the report.; } + const Visualization = props.component ? props.component : DEFAULT_VISUALIZATION_COMPONENT; // Retrieve config from advanced settings const settings = getSettings(props.settings, props.extensions, props.getGlobalParameter); + const lockable = props.lockable !== undefined ? props.lockable : true; const linkDirectionalParticles = props.settings && props.settings.relationshipParticles ? 5 : undefined; const arrowLengthProp = props?.settings?.arrowLengthProp ?? 3; let nodePositions = props.settings && props.settings.nodePositions ? props.settings.nodePositions : {}; @@ -125,7 +134,6 @@ const NeoGraphChart = (props: ChartProps) => { }); const pageNames = getPageNumbersAndNamesList(); - const chartProps: GraphChartVisualizationProps = { data: { nodes: data.nodes, @@ -142,12 +150,12 @@ const NeoGraphChart = (props: ChartProps) => { style: { width: width, height: height, - backgroundColor: settings.backgroundColor, + backgroundColor: theme == 'dark' && settings.backgroundColor == '#fafafa' ? '#040404' : settings.backgroundColor, // Temporary fix for default color adjustment in dark mode linkDirectionalParticles: linkDirectionalParticles, linkDirectionalArrowLength: arrowLengthProp, linkDirectionalParticleSpeed: settings.linkDirectionalParticleSpeed, nodeLabelFontSize: settings.nodeLabelFontSize, - nodeLabelColor: settings.nodeLabelColor, + nodeLabelColor: theme == 'dark' && settings.nodeLabelColor == 'black' ? 'white' : settings.nodeLabelColor, // Temporary fix for default color adjustment in dark mode relLabelFontSize: settings.relLabelFontSize, relLabelColor: settings.relLabelColor, defaultNodeSize: settings.defaultNodeSize, @@ -218,7 +226,7 @@ const NeoGraphChart = (props: ChartProps) => { }, [props.records]); return ( -
    +
    { > - {settings.lockable ? : <>} + {lockable && settings.lockable ? : <>} {settings.drilldownLink ? : <>} - + {settings.allowDownload && props.records && props.records.length > 0 ? ( diff --git a/src/chart/graph/GraphChartVisualization.ts b/src/chart/graph/GraphChartVisualization.ts index 79adee169..20cdce9a5 100644 --- a/src/chart/graph/GraphChartVisualization.ts +++ b/src/chart/graph/GraphChartVisualization.ts @@ -143,6 +143,22 @@ export interface GraphChartVisualizationProps { customTablePropertiesOfModal: any[]; pageIdAndParameterName: string; }; + /** + * A set of configuration parameters used for the visualization engine. + */ + config?: { + graphComponent: any; + cooldownAfterengineStop: number; + nodeCanvasObjectMode?: () => void; + nodeCanvasObject?: (node: any, ctx: any) => void; + linkCanvasObjectMode?: () => void; + linkCanvasObject?: (link: any, ctx: any) => void; + nodeThreeObjectExtend?: boolean; + nodeThreeObject?: (node) => void; + linkThreeObjectExtend?: boolean; + linkThreeObject?: (link) => void; + linkPositionUpdate?: (sprite: any, { start, end }: { start: any; end: any }, link: any, ref: any) => void; + }; /** * entries in 'extensions' let users plug in extra functionality into the visualization based on enabled plugins. */ diff --git a/src/chart/graph/GraphChartVisualization2D.tsx b/src/chart/graph/GraphChartVisualization2D.tsx index 4681b9461..2f5c1176a 100644 --- a/src/chart/graph/GraphChartVisualization2D.tsx +++ b/src/chart/graph/GraphChartVisualization2D.tsx @@ -5,103 +5,33 @@ import { getTooltip } from './component/GraphChartTooltip'; import { GraphChartVisualizationProps } from './GraphChartVisualization'; import { generateNodeCanvasObject } from './util/NodeUtils'; import { generateRelCanvasObject } from './util/RelUtils'; +import { NeoGraphChartVisualizationBase } from './GraphChartVisualizationBase'; /* - * TODO: check if makes sense to change zoom logic from panning to buttons - * (when i scroll the graphCharts has the priority ) + * */ export const NeoGraphChartVisualization2D = (props: GraphChartVisualizationProps) => { - const fgRef: React.MutableRefObject = useRef(); - - if (!props.style.width || !props.style.height) { - return <>; - } - props.interactivity.zoomToFit = () => fgRef.current && fgRef.current.zoomToFit(400); - - return ( - link.width} - linkLabel={(link: any) => (props.interactivity.showPropertiesOnHover ? `
    ${getTooltip(link)}
    ` : '')} - nodeLabel={(node: any) => (props.interactivity.showPropertiesOnHover ? `
    ${getTooltip(node)}
    ` : '')} - nodeVal={(node: any) => node.size} - onNodeClick={(item) => { - let rules = getRuleWithFieldPropertyName(item, props.extensions.actionsRules, 'onNodeClick', 'labels'); - rules != null - ? rules.forEach((rule) => executeActionRule(rule, item, { ...props.interactivity })) - : props.interactivity.onNodeClick(item); - }} - onLinkClick={(item) => { - let rules = getRuleWithFieldPropertyName(item, props.extensions.actionsRules, 'onLinkClick', 'type'); - rules != null - ? rules.forEach((rule) => executeActionRule(rule, item, props.interactivity.setGlobalParameter)) - : props.interactivity.onRelationshipClick(item); - }} - onNodeRightClick={(node, event) => props.interactivity.onNodeRightClick(node, event)} - onLinkRightClick={(link, event) => props.interactivity.onRelationshipRightClick(link, event)} - onBackgroundClick={() => props.interactivity.onNodeClick(undefined)} - onBackgroundRightClick={() => props.interactivity.onNodeClick(undefined)} - linkLineDash={(link) => (link.new ? [2, 1] : null)} - linkDirectionalParticles={props.style.linkDirectionalParticles} - linkDirectionalParticleSpeed={props.style.linkDirectionalParticleSpeed} - cooldownTicks={props.engine.cooldownTicks} - onEngineStop={() => { - props.engine.setCooldownTicks(0); - if (props.engine.recenterAfterEngineStop) { - fgRef.current.zoomToFit(400); - props.engine.setRecenterAfterEngineStop(false); - } - }} - onZoom={() => { - props.interactivity.setContextMenuOpen(false); - }} - onNodeDrag={() => { - props.interactivity.setContextMenuOpen(false); - props.engine.setCooldownTicks(1); - props.engine.setRecenterAfterEngineStop(false); - }} - onNodeDragEnd={(node) => { - props.engine.setCooldownTicks(0); - if (props.interactivity.fixNodeAfterDrag) { - node.fx = node.x; - node.fy = node.y; - } - if (props.interactivity.layoutFrozen) { - const key = node.id; - const val = [node.x, node.y]; - const old = { ...props.interactivity.nodePositions }; - old[key] = val; - props.interactivity.setNodePositions(old); - } - }} - nodeCanvasObjectMode={() => 'after'} - nodeCanvasObject={(node: any, ctx: any) => - generateNodeCanvasObject( - node, - ctx, - props.style.nodeIcons, - props.interactivity.layoutFrozen, - props.interactivity.nodePositions, - props.style.nodeLabelFontSize, - props.style.defaultNodeSize, - props.style.nodeLabelColor, - props.extensions.styleRules, - props.engine.selection - ) - } - linkCanvasObjectMode={() => 'after'} - linkCanvasObject={(link: any, ctx: any) => - generateRelCanvasObject(link, ctx, props.style.relLabelFontSize, props.style.relLabelColor) - } - graphData={props.style.width ? { nodes: props.data.nodes, links: props.data.links } : { nodes: [], links: [] }} - /> - ); + const config2d = { + graphComponent: ForceGraph2D, + cooldownAfterengineStop: 0, + nodeCanvasObjectMode: () => 'after', + nodeCanvasObject: (node: any, ctx: any) => + generateNodeCanvasObject( + node, + ctx, + props.style.nodeIcons, + props.interactivity.layoutFrozen, + props.interactivity.nodePositions, + props.style.nodeLabelFontSize, + props.style.defaultNodeSize, + props.style.nodeLabelColor, + props.extensions.styleRules, + props.engine.selection + ), + linkCanvasObjectMode: () => 'after', + linkCanvasObject: (link: any, ctx: any) => + generateRelCanvasObject(link, ctx, props.style.relLabelFontSize, props.style.relLabelColor), + }; + const props2d = { ...props, config: config2d }; + return ; }; diff --git a/src/chart/graph/GraphChartVisualizationBase.tsx b/src/chart/graph/GraphChartVisualizationBase.tsx new file mode 100644 index 000000000..7dbf6105b --- /dev/null +++ b/src/chart/graph/GraphChartVisualizationBase.tsx @@ -0,0 +1,98 @@ +import React, { useRef } from 'react'; +import { executeActionRule, getRuleWithFieldPropertyName } from '../../extensions/advancedcharts/Utils'; +import { getTooltip } from './component/GraphChartTooltip'; +import { GraphChartVisualizationProps } from './GraphChartVisualization'; + +export const NeoGraphChartVisualizationBase = (props: GraphChartVisualizationProps) => { + const fgRef: React.MutableRefObject = useRef(); + const GraphComponent = props.config?.graphComponent; + if (!props.style.width || !props.style.height) { + return <>; + } + props.interactivity.zoomToFit = () => fgRef.current && fgRef.current.zoomToFit(400); + return ( + link.width} + linkLabel={(link: any) => (props.interactivity.showPropertiesOnHover ? `
    ${getTooltip(link)}
    ` : '')} + nodeLabel={(node: any) => (props.interactivity.showPropertiesOnHover ? `
    ${getTooltip(node)}
    ` : '')} + nodeVal={(node: any) => node.size} + onNodeClick={(item) => { + let rules = getRuleWithFieldPropertyName(item, props.extensions.actionsRules, 'onNodeClick', 'labels'); + rules != null + ? rules.forEach((rule) => executeActionRule(rule, item, { ...props.interactivity })) + : props.interactivity.onNodeClick(item); + }} + onLinkClick={(item) => { + let rules = getRuleWithFieldPropertyName(item, props.extensions.actionsRules, 'onLinkClick', 'type'); + rules != null + ? rules.forEach((rule) => executeActionRule(rule, item, props.interactivity.setGlobalParameter)) + : props.interactivity.onRelationshipClick(item); + }} + onNodeRightClick={(node, event) => props.interactivity.onNodeRightClick(node, event)} + onLinkRightClick={(link, event) => props.interactivity.onRelationshipRightClick(link, event)} + onBackgroundClick={() => props.interactivity.onNodeClick(undefined)} + onBackgroundRightClick={() => props.interactivity.onNodeClick(undefined)} + linkLineDash={(link) => (link.new ? [2, 1] : null)} + linkDirectionalParticles={props.style.linkDirectionalParticles} + linkDirectionalParticleSpeed={props.style.linkDirectionalParticleSpeed} + cooldownTicks={props.engine.cooldownTicks} + onEngineStop={() => { + props.engine.setCooldownTicks(props.config.cooldownAfterengineStop); + if (props.engine.recenterAfterEngineStop) { + fgRef.current.zoomToFit(400); + props.engine.setRecenterAfterEngineStop(false); + } + }} + onZoom={() => { + props.interactivity.setContextMenuOpen(false); + }} + onNodeDrag={() => { + props.interactivity.setContextMenuOpen(false); + props.engine.setCooldownTicks(1); + props.engine.setRecenterAfterEngineStop(false); + }} + onNodeDragEnd={(node) => { + props.engine.setCooldownTicks(props.config.cooldownAfterengineStop); + if (props.interactivity.fixNodeAfterDrag) { + node.fx = node.x; + node.fy = node.y; + if (node.z !== undefined) { + node.fz = node.z; + } + } + // TODO - Frozen layout only works in 2D + if (props.interactivity.layoutFrozen) { + const key = node.id; + const val = [node.x, node.y]; + const old = { ...props.interactivity.nodePositions }; + old[key] = val; + props.interactivity.setNodePositions(old); + } + }} + // 2D-specific config settings + nodeCanvasObjectMode={props.config?.nodeCanvasObjectMode} + nodeCanvasObject={props.config?.nodeCanvasObject} + linkCanvasObjectMode={props.config?.linkCanvasObjectMode} + linkCanvasObject={props.config?.linkCanvasObject} + // 3D-specific config settings + nodeThreeObjectExtend={props.config?.nodeThreeObjectExtend} + nodeThreeObject={props.config?.nodeThreeObject} + linkThreeObjectExtend={props.config?.linkThreeObjectExtend} + linkThreeObject={props.config?.linkThreeObject} + linkPositionUpdate={(sprite, { start, end }, link) => + props.config?.linkPositionUpdate(sprite, { start, end }, link, fgRef) + } + // Data to populate graph + graphData={props.style.width ? { nodes: props.data.nodes, links: props.data.links } : { nodes: [], links: [] }} + /> + ); +}; diff --git a/src/chart/graph/component/GraphChartCanvas.tsx b/src/chart/graph/component/GraphChartCanvas.tsx index 532b7af36..68e5068d9 100644 --- a/src/chart/graph/component/GraphChartCanvas.tsx +++ b/src/chart/graph/component/GraphChartCanvas.tsx @@ -1,10 +1,21 @@ import React from 'react'; -const canvasStyle = { paddingLeft: '10px', position: 'relative', overflow: 'hidden', width: '100%', height: '100%' }; +const canvasStyle = { + paddingLeft: '10px', + marginBottom: 5, + position: 'relative', + overflow: 'hidden', + width: '100%', + height: '100%', +}; /** * Renders the canvas on which the graph visualization is projected. */ export const NeoGraphChartCanvas = ({ children }) => { - return
    {children}
    ; + return ( +
    + {children} +
    + ); }; diff --git a/src/chart/graph/component/GraphChartEditModal.tsx b/src/chart/graph/component/GraphChartEditModal.tsx index d68fb9b55..cb37edc29 100644 --- a/src/chart/graph/component/GraphChartEditModal.tsx +++ b/src/chart/graph/component/GraphChartEditModal.tsx @@ -203,7 +203,6 @@ export const GraphChartEditModal = (props: GraphChartEditorVisualizationProps) = -
    + >{`${outputValue}`} ); }; } @@ -107,8 +112,7 @@ export const NeoTableChart = (props: ChartProps) => { return key != 'id' ? key : `${key} `; }; - const actionableFields = actionsRules.map((r) => r.field); - + const actionableFields = actionsRules.filter((r) => r.condition !== 'rowCheck').map((r) => r.field); const columns = transposed ? [records[0].keys[0]].concat(records.map((record) => record._fields[0]?.toString() || '')).map((key, i) => { const uniqueKey = `${String(key)}_${i}`; @@ -126,7 +130,9 @@ export const NeoTableChart = (props: ChartProps) => { actionableFields.includes(key) ); }) - : records[0].keys.map((key, i) => { + : records[0] && + records[0].keys && + records[0].keys.map((key, i) => { const value = records[0].get(key); if (columnWidthsType == 'Relative (%)') { return ApplyColumnType( diff --git a/src/component/editor/CodeViewerComponent.tsx b/src/component/editor/CodeViewerComponent.tsx index d57faab9e..a9a539e82 100644 --- a/src/component/editor/CodeViewerComponent.tsx +++ b/src/component/editor/CodeViewerComponent.tsx @@ -18,6 +18,7 @@ const NeoCodeViewerComponent = ({ value = '', placeholder = '' }) => { paddingLeft: '10px', background: 'none', overflow: 'scroll !important', + marginTop: '5px', border: '1px solid lightgray', }} className={'textinput-linenumbers'} diff --git a/src/config/ReportConfig.tsx b/src/config/ReportConfig.tsx index 101302f7b..e9270c314 100644 --- a/src/config/ReportConfig.tsx +++ b/src/config/ReportConfig.tsx @@ -63,40 +63,6 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, - noDataMessage: { - label: 'Override no data message', - type: SELECTION_TYPES.TEXT, - default: 'Query returned no data.', - }, }, }, graph: { @@ -214,7 +180,7 @@ const _REPORT_TYPES = { graphDepthSep: { label: 'Tree layout level distance', type: SELECTION_TYPES.NUMBER, - default: '30', + default: 30, }, enableExploration: { label: 'Enable graph exploration', @@ -249,7 +215,7 @@ const _REPORT_TYPES = { drilldownLink: { label: 'Drilldown Icon Link', type: SELECTION_TYPES.TEXT, - placeholder: 'http://bloom.neo4j.io', + placeholder: 'https://bloom.neo4j.io', default: '', }, allowDownload: { @@ -264,58 +230,24 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, lockable: { label: 'Enable locking node positions', type: SELECTION_TYPES.LIST, values: [true, false], default: true, }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, iconStyle: { label: 'Node Label images', type: SELECTION_TYPES.TEXT, placeholder: '{label : url}', default: '', }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, rightClickToExpandNodes: { label: 'Right Click to Expand Nodes', type: SELECTION_TYPES.LIST, values: [true, false], default: false, }, - noDataMessage: { - label: 'Override no data message', - type: SELECTION_TYPES.TEXT, - default: 'Query returned no data.', - }, }, }, bar: { @@ -448,7 +380,7 @@ const _REPORT_TYPES = { marginBottom: { label: 'Margin Bottom', type: SELECTION_TYPES.NUMBER, - default: 45, + default: 30, }, legendWidth: { label: 'Legend Width', @@ -461,34 +393,27 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - refreshButtonEnabled: { - label: 'Refresh Button', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen', + expandHeightForLegend: { + label: 'Expand Height For Legend', type: SELECTION_TYPES.LIST, values: [true, false], default: false, }, - downloadImageEnabled: { - label: 'Download Image', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, + innerPadding: { + label: 'Inner Padding', + type: SELECTION_TYPES.NUMBER, + default: 0, }, - autorun: { - label: 'Auto-run query', + legendPosition: { + label: 'Legend Position', type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, + values: ['Horizontal', 'Vertical'], + default: 'Vertical', }, - refreshRate: { - label: 'Refresh Rate', + padding: { + label: 'Padding', type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', + default: 0.25, }, expandHeightForLegend: { label: 'Expand Height For Legend', @@ -642,35 +567,6 @@ const _REPORT_TYPES = { type: SELECTION_TYPES.NUMBER, default: 50, }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, }, }, line: { @@ -819,35 +715,6 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, }, }, // TODO - move to advanced visualization. @@ -994,40 +861,6 @@ const _REPORT_TYPES = { // values: [true, false], // default: false, // }, - // refreshButtonEnabled: { - // label: 'Refreshable', - // type: SELECTION_TYPES.LIST, - // values: [true, false], - // default: false, - // }, - // fullscreenEnabled: { - // label: 'Fullscreen enabled', - // type: SELECTION_TYPES.LIST, - // values: [true, false], - // default: false, - // }, - // downloadImageEnabled: { - // label: 'Download Image enabled', - // type: SELECTION_TYPES.LIST, - // values: [true, false], - // default: false, - // }, - // autorun: { - // label: 'Auto-run query', - // type: SELECTION_TYPES.LIST, - // values: [true, false], - // default: true, - // }, - // refreshRate: { - // label: 'Refresh rate (seconds)', - // type: SELECTION_TYPES.NUMBER, - // default: '0 (No refresh)', - // }, - // description: { - // label: 'Report Description', - // type: SELECTION_TYPES.MULTILINE_TEXT, - // default: 'Enter markdown here...', - // }, // }, // }, map: { @@ -1126,12 +959,6 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, }, }, value: { @@ -1174,35 +1001,6 @@ const _REPORT_TYPES = { values: ['bottom', 'middle', 'top'], default: 'top', }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, }, }, json: { @@ -1218,35 +1016,6 @@ const _REPORT_TYPES = { values: ['json', 'yml'], default: 'json', }, - refreshButtonEnabled: { - label: 'Refreshable', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - autorun: { - label: 'Auto-run query', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: true, - }, - refreshRate: { - label: 'Refresh rate (seconds)', - type: SELECTION_TYPES.NUMBER, - default: '0 (No refresh)', - }, }, }, select: { @@ -1323,6 +1092,12 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, + autoSelectFirstValue: { + label: 'Auto-select first value on no selection', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, manualPropertyNameSpecification: { label: 'Manual Label/Property Name Specification', type: SELECTION_TYPES.LIST, @@ -1349,12 +1124,6 @@ const _REPORT_TYPES = { type: SELECTION_TYPES.NUMBER, default: 1000, }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, }, }, iframe: { @@ -1380,12 +1149,6 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, }, }, text: { @@ -1404,18 +1167,6 @@ const _REPORT_TYPES = { values: [true, false], default: true, }, - fullscreenEnabled: { - label: 'Fullscreen enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - downloadImageEnabled: { - label: 'Download Image enabled', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, }, }, }; @@ -1438,6 +1189,40 @@ export const COMMON_REPORT_SETTINGS = { default: false, refresh: true, }, + refreshButtonEnabled: { + label: 'Refreshable', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, + fullscreenEnabled: { + label: 'Fullscreen enabled', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, + downloadImageEnabled: { + label: 'Download Image enabled', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, + autorun: { + label: 'Auto-run query', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: true, + }, + refreshRate: { + label: 'Refresh rate (seconds)', + type: SELECTION_TYPES.NUMBER, + default: '0 (No refresh)', + }, + noDataMessage: { + label: 'Override no data message', + type: SELECTION_TYPES.TEXT, + default: 'Query returned no data.', + }, }; export const REPORT_TYPES = objectMap(_REPORT_TYPES, (value: any) => { diff --git a/src/dashboard/Dashboard.tsx b/src/dashboard/Dashboard.tsx index 50b266e60..1039fce91 100644 --- a/src/dashboard/Dashboard.tsx +++ b/src/dashboard/Dashboard.tsx @@ -36,7 +36,6 @@ const Dashboard = ({ ); setDriver(newDriver); } - const content = ( - {standaloneSettings.standalonePassword ? ( + {standaloneSettings.standalonePassword && + standaloneSettings.standalonePasswordWarningHidden !== true ? (
    Warning: NeoDash is running with a plaintext password in config.json.
    diff --git a/src/dashboard/DashboardThunks.ts b/src/dashboard/DashboardThunks.ts index a813b150a..aa563d444 100644 --- a/src/dashboard/DashboardThunks.ts +++ b/src/dashboard/DashboardThunks.ts @@ -404,7 +404,7 @@ export const loadDashboardFromNeo4jByNameThunk = if (records.length == 0) { dispatch( createNotificationThunk( - 'Unable to load dashboard.', + `Unable to load dashboard "${name}".`, 'A dashboard with the provided name could not be found.' ) ); @@ -429,7 +429,7 @@ export const loadDashboardFromNeo4jByNameThunk = } if (records[0].error) { - dispatch(createNotificationThunk('Unable to load dashboard.', records[0].error)); + dispatch(createNotificationThunk(`Unable to load dashboard "${name}".`, records[0].error)); if (loggingSettings.loggingMode > '1') { dispatch( createLogThunk( @@ -502,7 +502,7 @@ export const loadDashboardListFromNeo4jThunk = (driver, database, callback) => ( runCypherQuery( driver, database, - 'MATCH (n:_Neodash_Dashboard) RETURN n.uuid as uuid, n.title as title, toString(n.date) as date, n.user as author, n.version as version ORDER BY date DESC', + 'MATCH (n:_Neodash_Dashboard) RETURN n.uuid as uuid, n.title as title, toString(n.date) as date, n.user as author, n.version as version ORDER BY toLower(n.title) ASC', {}, 1000, (status) => setStatus(status), diff --git a/src/dashboard/header/DashboardHeader.tsx b/src/dashboard/header/DashboardHeader.tsx index 707a22f3c..0905972bf 100644 --- a/src/dashboard/header/DashboardHeader.tsx +++ b/src/dashboard/header/DashboardHeader.tsx @@ -52,7 +52,7 @@ export const NeoDashboardHeader = ({
    diff --git a/src/dashboard/header/DashboardHeaderPageTitle.tsx b/src/dashboard/header/DashboardHeaderPageTitle.tsx index 6efefc156..eba9efbca 100644 --- a/src/dashboard/header/DashboardHeaderPageTitle.tsx +++ b/src/dashboard/header/DashboardHeaderPageTitle.tsx @@ -4,7 +4,7 @@ import classnames from 'classnames'; import debounce from 'lodash/debounce'; import { setPageTitle } from '../../page/PageActions'; import { removePageThunk } from '../DashboardThunks'; -import { Tab, Menu, MenuItems, MenuItem, IconButton, TextInput } from '@neo4j-ndl/react'; +import { Tab, Menu, MenuItems, MenuItem, IconButton } from '@neo4j-ndl/react'; import { EllipsisHorizontalIconOutline, PencilIconOutline, TrashIconOutline } from '@neo4j-ndl/react/icons'; import { NeoDeletePageModal } from '../../modal/DeletePageModal'; import { useSortable } from '@dnd-kit/sortable'; @@ -17,12 +17,9 @@ export const DashboardHeaderPageTitle = ({ title, tabIndex, removePage, setPageT const menuOpen = Boolean(anchorEl); const [deleteModalOpen, setDeleteModalOpen] = React.useState(false); const [editing, setEditing] = React.useState(false); - + const [inputWidth, setInputWidth] = React.useState(125); const handleMenuEditClick = (event: MenuEditEvent) => { event.preventDefault(); - if (editing) { - debouncedSetPageTitle(tabIndex, titleText); - } setEditing(!editing); setAnchorEl(null); }; @@ -49,7 +46,7 @@ export const DashboardHeaderPageTitle = ({ title, tabIndex, removePage, setPageT transition, }; - const debouncedSetPageTitle = useCallback(debounce(setPageTitle, 250), []); + const debouncedSetPageTitle = useCallback(debounce(setPageTitle, 200), []); const [titleText, setTitleText] = React.useState(title); useEffect(() => { @@ -69,24 +66,46 @@ export const DashboardHeaderPageTitle = ({ title, tabIndex, removePage, setPageT '(no title)' ) ) : ( - { - if (disabled) { - return; +
    { + if (editing) { + handleMenuEditClick(event); } - setTitleText(event.target.value); }} - style={{ - textAlign: 'center', - height: '1.9rem', - }} - placeholder='Page name...' - /> + > + { + if (editing) { + handleMenuEditClick(event); + } + }} + onChange={(event) => { + const { target } = event; + target.style.width = '125px'; + setInputWidth(target.scrollWidth); + + if (disabled) { + return; + } + setTitleText(event.target.value); + debouncedSetPageTitle(tabIndex, event.target.value); + }} + style={{ + height: '1.9rem', + marginBottom: -5, + width: inputWidth, + paddingLeft: 5, + paddingRight: 5, + }} + placeholder='Page name...' + /> +
    )} - {!disabled && ( + {!disabled && !editing && ( <> } - title={editing ? 'Stop Editing' : 'Edit name'} + title={'Edit name'} onClick={(e) => { e.stopPropagation(); + if (editing) { + debouncedSetPageTitle(tabIndex, titleText); + } !disabled && handleMenuEditClick(e); }} /> diff --git a/src/dashboard/header/DashboardTitle.tsx b/src/dashboard/header/DashboardTitle.tsx index 74e072f8c..f6c67d242 100644 --- a/src/dashboard/header/DashboardTitle.tsx +++ b/src/dashboard/header/DashboardTitle.tsx @@ -7,7 +7,12 @@ import { getDashboardTitle, getDashboardExtensions, getDashboardSettings } from import { getDashboardIsEditable } from '../../settings/SettingsSelectors'; import { updateDashboardSetting } from '../../settings/SettingsActions'; import { Typography, IconButton, Menu, MenuItems, TextInput } from '@neo4j-ndl/react'; -import { CheckBadgeIconOutline, EllipsisHorizontalIconOutline, PencilSquareIconOutline } from '@neo4j-ndl/react/icons'; +import { + CheckBadgeIconOutline, + CheckIconOutline, + EllipsisHorizontalIconOutline, + PencilSquareIconOutline, +} from '@neo4j-ndl/react/icons'; import NeoSettingsModal from '../../settings/SettingsModal'; import NeoExtensionsModal from '../../extensions/ExtensionsModal'; import { EXTENSIONS_DRAWER_BUTTONS } from '../../extensions/ExtensionConfig'; @@ -31,7 +36,7 @@ export const NeoDashboardTitle = ({ const [anchorEl, setAnchorEl] = useState(null); const [editing, setEditing] = React.useState(false); const debouncedDashboardTitleUpdate = useCallback(debounce(setDashboardTitle, 250), []); - + const [inputWidth, setInputWidth] = React.useState(350); const handleSettingsMenuOpen = (event: SettingsMenuOpenEvent) => { setAnchorEl(event.currentTarget); }; @@ -58,6 +63,7 @@ export const NeoDashboardTitle = ({ } useEffect(() => { + document.title = dashboardTitle ? `NeoDash - ${dashboardTitle}` : 'NeoDash - Neo4j Dashboard Builder'; // Reset text to the dashboard state when the page gets reorganized. if (dashboardTitle !== dashboardTitleText) { setDashboardTitleText(dashboardTitle); @@ -69,21 +75,40 @@ export const NeoDashboardTitle = ({ {/* only allow edit title if dashboard is not standalone - here we are in Title edit mode*/} {editing && !standaloneSettings.standalone ? (
    - { - if (editable) { - setDashboardTitleText(event.target.value); - debouncedDashboardTitleUpdate(event.target.value); +
    { + if (editing) { + setEditing(false); } }} - /> + > + { + if (editing) { + setEditing(false); + } + }} + onChange={(event) => { + if (editable) { + const { target } = event; + target.style.width = '350px'; + setInputWidth(target.scrollWidth); + setDashboardTitleText(event.target.value); + debouncedDashboardTitleUpdate(event.target.value); + } + }} + /> +
    setEditing(false)} clean > - +
    diff --git a/src/dashboard/sidebar/DashboardSidebar.tsx b/src/dashboard/sidebar/DashboardSidebar.tsx index 5c27b8158..bfe580f10 100644 --- a/src/dashboard/sidebar/DashboardSidebar.tsx +++ b/src/dashboard/sidebar/DashboardSidebar.tsx @@ -41,6 +41,7 @@ import NeoDashboardSidebarShareModal from './modal/DashboardSidebarShareModal'; import LegacyShareModal from './modal/legacy/LegacyShareModal'; import { NEODASH_VERSION } from '../DashboardReducer'; +// Which (small) pop-up menu is currently open for the sidebar. enum Menu { DASHBOARD = 0, DATABASE = 1, @@ -48,6 +49,7 @@ enum Menu { NONE = 3, } +// Which (large) pop-up modal is currently open for the sidebar. enum Modal { CREATE = 0, IMPORT = 1, @@ -61,6 +63,9 @@ enum Modal { NONE = 9, } +// We use "index = -1" to represent a non-saved draft dashboard in the sidebar's dashboard list. +const UNSAVED_DASHBOARD_INDEX = -1; + /** * A component responsible for rendering the sidebar on the left of the screen. */ @@ -83,10 +88,10 @@ export const NeoDashboardSidebar = ({ }) => { const { driver } = useContext(Neo4jContext); const [expanded, setOnExpanded] = useState(false); - const [selectedDashboardIndex, setSelectedDashboardIndex] = React.useState(-1); + const [selectedDashboardIndex, setSelectedDashboardIndex] = React.useState(UNSAVED_DASHBOARD_INDEX); const [dashboardDatabase, setDashboardDatabase] = React.useState(database ? database : 'neo4j'); const [databases, setDatabases] = useState([]); - const [inspectedIndex, setInspectedIndex] = useState(-1); + const [inspectedIndex, setInspectedIndex] = useState(UNSAVED_DASHBOARD_INDEX); const [searchText, setSearchText] = useState(''); const [menuAnchor, setMenuAnchor] = useState(null); const [menuOpen, setMenuOpen] = useState(Menu.NONE); @@ -103,7 +108,7 @@ export const NeoDashboardSidebar = ({ if (dashboard && dashboard.uuid) { const index = list.findIndex((element) => element.uuid == dashboard.uuid); setSelectedDashboardIndex(index); - if (index == -1) { + if (index == UNSAVED_DASHBOARD_INDEX) { // If we can't find the currently dashboard in the database, we are drafting a new one. setDraft(true); } @@ -121,8 +126,9 @@ export const NeoDashboardSidebar = ({ // Creates new dashboard in draft state (not yet saved to Neo4j) deleteDashboardFromNeo4j(driver, dashboardDatabase, uuid, () => { if (uuid == dashboard.uuid) { - setSelectedDashboardIndex(0); + setSelectedDashboardIndex(UNSAVED_DASHBOARD_INDEX); resetLocalDashboard(); + loadDashboardListFromNeo4j(); setDraft(true); } setTimeout(() => { @@ -154,19 +160,27 @@ export const NeoDashboardSidebar = ({ } ); }} + overwrite={selectedDashboardIndex >= 0} handleClose={() => setModalOpen(Modal.NONE)} /> { - setModalOpen(Modal.LOAD); - const { uuid } = dashboards[inspectedIndex]; - loadDashboardFromNeo4j(driver, dashboardDatabase, uuid, (file) => { - setDraft(false); - loadDashboard(uuid, file); - setSelectedDashboardIndex(inspectedIndex); - }); + if (inspectedIndex == UNSAVED_DASHBOARD_INDEX) { + // Someone attempted to load the unsaved draft dashboard... this isn't possible, we create a fresh one. + setSelectedDashboardIndex(UNSAVED_DASHBOARD_INDEX); + createDashboard(); + } else { + // Load one of the dashboards from the database. + setModalOpen(Modal.LOAD); + const { uuid } = dashboards[inspectedIndex]; + loadDashboardFromNeo4j(driver, dashboardDatabase, uuid, (file) => { + setDraft(false); + loadDashboard(uuid, file); + setSelectedDashboardIndex(inspectedIndex); + }); + } }} handleClose={() => setModalOpen(Modal.NONE)} /> @@ -190,6 +204,7 @@ export const NeoDashboardSidebar = ({ onConfirm={() => { setModalOpen(Modal.NONE); createDashboard(); + setSelectedDashboardIndex(UNSAVED_DASHBOARD_INDEX); }} handleClose={() => setModalOpen(Modal.NONE)} /> @@ -211,6 +226,7 @@ export const NeoDashboardSidebar = ({ onImport={(text) => { setModalOpen(Modal.NONE); setDraft(true); + setSelectedDashboardIndex(UNSAVED_DASHBOARD_INDEX); loadDashboard(createUUID(), text); }} handleClose={() => setModalOpen(Modal.NONE)} @@ -271,6 +287,7 @@ export const NeoDashboardSidebar = ({ }} /> { @@ -281,6 +298,14 @@ export const NeoDashboardSidebar = ({ }); setModalOpen(Modal.INFO); }} + handleDiscardClicked={() => { + setMenuOpen(Menu.NONE); + setModalOpen(Modal.LOAD); + }} + handleSaveClicked={() => { + setMenuOpen(Menu.NONE); + setModalOpen(Modal.SAVE); + }} handleLoadClicked={() => { setMenuOpen(Menu.NONE); if (draft) { @@ -323,6 +348,7 @@ export const NeoDashboardSidebar = ({ if (draft) { setModalOpen(Modal.CREATE); } else { + setSelectedDashboardIndex(UNSAVED_DASHBOARD_INDEX); createDashboard(); } }} @@ -425,15 +451,18 @@ export const NeoDashboardSidebar = ({ onChange={(e) => setSearchText(e.target.value)} /> - {draft && !readonly ? ( + {draft && selectedDashboardIndex == UNSAVED_DASHBOARD_INDEX && !readonly ? ( {}} - onSave={() => setModalOpen(Modal.SAVE)} - onSettingsOpen={() => {}} + onSettingsOpen={(event) => { + setInspectedIndex(UNSAVED_DASHBOARD_INDEX); + setMenuOpen(Menu.DASHBOARD); + setMenuAnchor(event.currentTarget); + }} /> ) : ( <> @@ -444,13 +473,13 @@ export const NeoDashboardSidebar = ({ // index stored in list return ( { - if (draft) { + if (draft && d.index !== selectedDashboardIndex) { setInspectedIndex(d.index); setModalOpen(Modal.LOAD); } else { @@ -460,7 +489,6 @@ export const NeoDashboardSidebar = ({ }); } }} - onSave={() => {}} onSettingsOpen={(event) => { setInspectedIndex(d.index); setMenuOpen(Menu.DASHBOARD); diff --git a/src/dashboard/sidebar/DashboardSidebarListItem.tsx b/src/dashboard/sidebar/DashboardSidebarListItem.tsx index 0740224c3..96ab80ee2 100644 --- a/src/dashboard/sidebar/DashboardSidebarListItem.tsx +++ b/src/dashboard/sidebar/DashboardSidebarListItem.tsx @@ -4,16 +4,7 @@ import { CloudArrowUpIconOutline, EllipsisVerticalIconOutline } from '@neo4j-ndl import Tooltip from '@mui/material/Tooltip'; import { NEODASH_VERSION } from '../DashboardReducer'; -export const DashboardSidebarListItem = ({ - title, - selected, - readonly, - saved, - version, - onSelect, - onSave, - onSettingsOpen, -}) => { +export const DashboardSidebarListItem = ({ title, selected, readonly, saved, version, onSelect, onSettingsOpen }) => { return (
    @@ -28,7 +19,7 @@ export const DashboardSidebarListItem = ({ size='medium' color={selected == true ? (saved == true ? 'primary' : 'warning') : 'neutral'} style={{ - width: '300px', + width: '240px', whiteSpace: 'nowrap', overflowX: 'clip', justifyContent: 'left', @@ -56,7 +47,7 @@ export const DashboardSidebarListItem = ({ marginRight: '10px', }} onClick={(event) => { - saved == false ? onSave() : onSettingsOpen(event); + saved == false ? onSettingsOpen(event) : onSettingsOpen(event); }} > {saved == true ? ( @@ -67,8 +58,8 @@ export const DashboardSidebarListItem = ({ /> ) : ( - - + - - } title='Info' /> - } title='Load' /> - {/* {}} icon={} title='Clone' /> */} - } title='Export' /> - } title='Share' /> - } title='Delete' /> - + {!draft ? ( + + } title='Info' /> + } title='Load' /> + {/* {}} icon={} title='Clone' /> */} + } title='Export' /> + } title='Share' /> + } title='Delete' /> + + ) : ( + + } title='Save' /> + } title='Discard Draft' /> + + )} ); }; diff --git a/src/dashboard/sidebar/modal/DashboardSidebarLoadModal.tsx b/src/dashboard/sidebar/modal/DashboardSidebarLoadModal.tsx index 17da9b9bb..0149c81c7 100644 --- a/src/dashboard/sidebar/modal/DashboardSidebarLoadModal.tsx +++ b/src/dashboard/sidebar/modal/DashboardSidebarLoadModal.tsx @@ -10,9 +10,9 @@ export const NeoDashboardSidebarLoadModal = ({ open, onConfirm, handleClose }) = Discard Draft? - Switching your active dashboard will delete your current draft. + You are discarding your current draft dashboard.
    - Save the draft first to ensure your dashboard is stored. + Your draft will not be recoverable.
    +
    {/* Only let users create dashboards and change database when running in editor mode. */} {!readonly || (readonly && standaloneSettings.standaloneLoadFromOtherDatabases) ? ( <> @@ -379,7 +412,7 @@ export const NeoDashboardSidebar = ({ style={{ float: 'right', marginLeft: '0px', - marginRight: '12px', + marginRight: '3px', paddingLeft: 0, paddingRight: '3px', }} @@ -479,7 +512,7 @@ export const NeoDashboardSidebar = ({ saved={!(draft && selectedDashboardIndex == d.index)} readonly={readonly} onSelect={() => { - if (draft && d.index !== selectedDashboardIndex) { + if (draft) { setInspectedIndex(d.index); setModalOpen(Modal.LOAD); } else { diff --git a/src/index.pcss b/src/index.pcss index ad0fea17c..f1bd03ad2 100644 --- a/src/index.pcss +++ b/src/index.pcss @@ -37,6 +37,10 @@ @apply n-mr-token-2 n-w-4 n-h-4; } + .btn-icon-base-r-m { + @apply n-ml-token-3 n-w-5 n-h-5; + } + .btn-icon-base-r { @apply n-ml-token-3 n-w-6 n-h-6; } From 8dabb2942c699d59534a8839e5b24b0386f9433f Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:36:21 +0100 Subject: [PATCH 012/120] Fixing wrong behaviour in GraphChart report Action (#782) * drafting solution, looks like is deeper than expected in the graphChart * reverting commit, found realError, global variable was overwritten in local scope (type) --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong --- src/extensions/actions/ActionsRuleCreationModal.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/extensions/actions/ActionsRuleCreationModal.tsx b/src/extensions/actions/ActionsRuleCreationModal.tsx index 38ebec995..48d6486ad 100644 --- a/src/extensions/actions/ActionsRuleCreationModal.tsx +++ b/src/extensions/actions/ActionsRuleCreationModal.tsx @@ -236,9 +236,9 @@ export const NeoCustomReportActionsModal = ({ return []; }; - const createFieldVariableSuggestionsFromRule = (rule, type) => { - let suggestions; - if (type) { + const createFieldVariableSuggestionsFromRule = (rule, skipRuleFieldCheck) => { + let suggestions: string[]; + if (skipRuleFieldCheck) { suggestions = createFieldVariableSuggestions(rule.condition, true, null).filter((e) => e.toLowerCase().startsWith(rule.field.toLowerCase()) ); @@ -249,13 +249,11 @@ export const NeoCustomReportActionsModal = ({ e.toLowerCase().startsWith(rule.value.toLowerCase()) ); } - // When we are accessing node properties (not page names), parse the node label + property pair to only show properties. // Fields for graph and map reports are structured differently than regular reports (table, bar, etc.), so we access suggestions differently. if (rule.customization !== 'set page' && (type == 'graph' || type == 'map' || type == 'graph3d')) { suggestions = suggestions.map((e) => e.split('.')[1] || e); } - return suggestions; }; From b535a0141cb75e51ea33cc189ba5018c21e46243 Mon Sep 17 00:00:00 2001 From: jacobbleakley-neo4j <134383980+jacobbleakley-neo4j@users.noreply.github.com> Date: Thu, 22 Feb 2024 08:42:58 +0000 Subject: [PATCH 013/120] Fix/clipping examples (#768) * wrapped text vertically, to understand how to prevent column resizing * Added cellWidth to limit width of cells and stop out of scope table. Also added x-direction scrollbar for overflow --------- Co-authored-by: Alfred Rubin --- .../model-examples/ExampleDisplayTable.tsx | 66 ++++++++++++++++--- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/src/extensions/text2cypher/component/model-examples/ExampleDisplayTable.tsx b/src/extensions/text2cypher/component/model-examples/ExampleDisplayTable.tsx index e2e925f50..82115cbda 100644 --- a/src/extensions/text2cypher/component/model-examples/ExampleDisplayTable.tsx +++ b/src/extensions/text2cypher/component/model-examples/ExampleDisplayTable.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { TrashIconOutline, PencilSquareIconOutline, @@ -7,6 +7,7 @@ import { ChevronDoubleRightIconOutline, ChevronRightIconOutline, } from '@neo4j-ndl/react/icons'; +import ShowMoreText from 'react-show-more-text'; import { createColumnHelper, flexRender, @@ -57,11 +58,15 @@ function ExampleDisplayTable({ examples, deleteModelExample, handleEdit }) { const columns = React.useMemo( () => [ columnHelper.accessor('question', { - cell: (info) => info.getValue(), + cell: (info) => {info.getValue()}, header: () => 'Question', }), columnHelper.accessor('answer', { - cell: (info) => info.getValue(), + cell: (info) => ( +
    + {info.getValue()} +
    + ), header: 'Answer', }), { @@ -87,19 +92,52 @@ function ExampleDisplayTable({ examples, deleteModelExample, handleEdit }) { }, }); + const [cellWidth, setCellWidth] = useState('600px'); + + // For screens with 1080 x pixels or less + useEffect(() => { + const updateCellWidth = () => { + if (window.innerWidth <= 1080) { + // Example breakpoint for smaller screens + setCellWidth('463px'); + } else { + setCellWidth('600px'); + } + }; + + window.addEventListener('resize', updateCellWidth); + updateCellWidth(); // Initialize on component mount + + return () => window.removeEventListener('resize', updateCellWidth); + }, []); + return (
    -
    +
    {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( - ))} @@ -110,11 +148,23 @@ function ExampleDisplayTable({ examples, deleteModelExample, handleEdit }) { {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( - ))} From 5a4d1d9afb7911e30f87700d4cc46c2a5521c508 Mon Sep 17 00:00:00 2001 From: jacobbleakley-neo4j <134383980+jacobbleakley-neo4j@users.noreply.github.com> Date: Thu, 22 Feb 2024 08:43:45 +0000 Subject: [PATCH 014/120] Interaction (tooltip) working when "custom label position" == "off" (#760) Co-authored-by: Niels de Jong --- src/chart/bar/BarChart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chart/bar/BarChart.tsx b/src/chart/bar/BarChart.tsx index 4d754c399..132d13ecb 100644 --- a/src/chart/bar/BarChart.tsx +++ b/src/chart/bar/BarChart.tsx @@ -272,7 +272,7 @@ const NeoBarChart = (props: ChartProps) => { return { width: this.offsetWidth, height: this.offsetHeight }; }; - const extraProperties = positionLabel ? { barComponent: BarComponent } : {}; + const extraProperties = positionLabel !== 'off' ? { barComponent: BarComponent } : {}; const canvas = data.length > 30; const BarChartComponent = canvas ? ResponsiveBarCanvas : ResponsiveBar; From 8c8fa6187a26b410e37f97e3ef8f5d49bbd2da52 Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Fri, 23 Feb 2024 09:15:39 +0100 Subject: [PATCH 015/120] adding symbol to force utf-8 casting in Excel (#790) Co-authored-by: Alfred Rubin --- src/chart/ChartUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index a0b453abd..cd6feb8c0 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -172,7 +172,7 @@ export const downloadCSV = (rows) => { }); csv += '\n'; }); - const file = new Blob([csv], { type: 'text/plain;charset=utf8' }); + const file = new Blob([`\ufeff${ csv}`], { type: 'text/plain;charset=utf8' }); element.href = URL.createObjectURL(file); element.download = 'table.csv'; document.body.appendChild(element); // Required for this to work in FireFox From 90f51f3ca33bb62026b8dbb5754325da9db426c1 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Tue, 27 Feb 2024 16:26:29 +0100 Subject: [PATCH 016/120] Tweak Cypress test issues (#796) --- cypress/e2e/bar_chart.cy.js | 18 ++++++++---------- cypress/e2e/start_page.cy.js | 6 ++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/cypress/e2e/bar_chart.cy.js b/cypress/e2e/bar_chart.cy.js index 55486b95b..7b9d22a45 100644 --- a/cypress/e2e/bar_chart.cy.js +++ b/cypress/e2e/bar_chart.cy.js @@ -206,7 +206,7 @@ describe('Testing bar chart', () => { }); }); - it('Checking the stacked grouping function works as intended', () => { + it.skip('Checking the stacked grouping function works as intended', () => { cy.advancedSettings(() => { cy.get('.ndl-cypher-editor div[role="textbox"]') .should('be.visible') @@ -295,7 +295,7 @@ describe('Testing bar chart', () => { }); }); - it('Testing "Show Value on Bars"', () => { + it.skip('Testing "Show Value on Bars"', () => { cy.advancedSettings(() => { cy.setDropdownValue('Show Values On Bars', 'on'); cy.get('button[aria-label="run"]').click(); @@ -306,13 +306,11 @@ describe('Testing bar chart', () => { cy.log('Number of text elements:', textElements.length); }); }); - cy.wait(100) - cy.openSettings(()=> { - cy.setDropdownValue('Show Values On Bars', 'off') + cy.wait(100); + cy.openSettings(() => { + cy.setDropdownValue('Show Values On Bars', 'off'); cy.get('button[aria-label="run"]').click(); - cy.get('.MuiCardContent-root') - .find('div svg > g > g > text') - .should('not.exist') - }) + cy.get('.MuiCardContent-root').find('div svg > g > g > text').should('not.exist'); + }); }); -}); \ No newline at end of file +}); diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index facb5431d..171d4535b 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -88,8 +88,8 @@ describe('NeoDash E2E Tests', () => { .should('contain', 'title') .and('contain', 'released') .and('not.contain', '__id'); - cy.get('main .react-grid-item:eq(2) .MuiDataGrid-virtualScroller .MuiDataGrid-row').should('have.length', 5); - cy.get('main .react-grid-item:eq(2) .MuiDataGrid-footerContainer').should('contain', '1–5 of 8'); + // cy.get('main .react-grid-item:eq(2) .MuiDataGrid-virtualScroller .MuiDataGrid-row').should('have.length', 5); + // cy.get('main .react-grid-item:eq(2) .MuiDataGrid-footerContainer').should('contain', '1–5 of 8'); cy.get('main .react-grid-item:eq(2) .MuiDataGrid-footerContainer button[aria-label="Go to next page"]').click(); cy.get('main .react-grid-item:eq(2) .MuiDataGrid-virtualScroller .MuiDataGrid-row').should('have.length', 3); cy.get('main .react-grid-item:eq(2) .MuiDataGrid-footerContainer').should('contain', '6–8 of 8'); @@ -336,5 +336,3 @@ function createReportOfType(type, query, fast = false, run = true) { cy.get('main .react-grid-item:eq(2) button[aria-label="run"]').click(); } } - - From 2f99dfbe88a2158f1469955f60fec9102d669596 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:47:47 +0000 Subject: [PATCH 017/120] Bump es5-ext from 0.10.62 to 0.10.64 Bumps [es5-ext](https://github.com/medikoo/es5-ext) from 0.10.62 to 0.10.64. - [Release notes](https://github.com/medikoo/es5-ext/releases) - [Changelog](https://github.com/medikoo/es5-ext/blob/main/CHANGELOG.md) - [Commits](https://github.com/medikoo/es5-ext/compare/v0.10.62...v0.10.64) --- updated-dependencies: - dependency-name: es5-ext dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index fcb9b0188..647480b32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7188,12 +7188,13 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.49, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@^0.10.62, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" + esniff "^2.0.1" next-tick "^1.1.0" es6-error@^4.0.1: @@ -7424,6 +7425,16 @@ esniff@^1.1.0: d "1" es5-ext "^0.10.12" +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + espree@^9.4.0: version "9.4.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" From 6b1379be9801b96f691667b40e6793c79edd27cf Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Wed, 28 Feb 2024 09:43:14 +0100 Subject: [PATCH 018/120] Fix/parameter select (#794) * fixed two errors: on initialization two values of which one was empty and input.toLowerCase is not a function error * fix zero was casting to string * Style fixes on tests * Skip broken test for bar chart * Skip broken tests in CI/CD pipeline * Disable flake test for tables --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong --- cypress/e2e/bar_chart.cy.js | 12 +- cypress/e2e/table.cy.js | 148 ++++++------ .../component/DateParameterSelect.tsx | 1 - .../component/NodePropertyParameterSelect.tsx | 16 +- yarn.lock | 219 +++++++++++------- 5 files changed, 226 insertions(+), 170 deletions(-) diff --git a/cypress/e2e/bar_chart.cy.js b/cypress/e2e/bar_chart.cy.js index 7b9d22a45..3f9c20faa 100644 --- a/cypress/e2e/bar_chart.cy.js +++ b/cypress/e2e/bar_chart.cy.js @@ -84,7 +84,7 @@ describe('Testing bar chart', () => { cy.wait(500); }); - it('Checking Colour Picker settings', () => { + it.skip('Checking Colour Picker settings', () => { //Opens advanced settings cy.get('.react-grid-layout') .first() @@ -114,7 +114,7 @@ describe('Testing bar chart', () => { }); }); - it('Checking Selector Description', () => { + it.skip('Checking Selector Description', () => { //Opens first 2nd card cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { // Access advanced settings @@ -135,7 +135,7 @@ describe('Testing bar chart', () => { cy.get('div[role="dialog"]').parent().click(-100, -100, { force: true }); }); - it('Checking full screen bar chart setting', () => { + it.skip('Checking full screen bar chart setting', () => { //Opens first 2nd card cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { // Opening settings @@ -164,7 +164,7 @@ describe('Testing bar chart', () => { cy.get('div[data-focus-lock-disabled="false"]').should('not.exist'); }); - it('Checking "Autorun Query" works as intended', () => { + it.skip('Checking "Autorun Query" works as intended', () => { // Custom command to open advanced settings cy.advancedSettings(() => { // Finding 'Auto-run query setting and changing it to 'off' @@ -184,7 +184,7 @@ describe('Testing bar chart', () => { }); }); - it('Checking Legend integration works as intended', () => { + it.skip('Checking Legend integration works as intended', () => { cy.advancedSettings(() => { // Checking that legend appears cy.setDropdownValue('Show Legend', 'on'); @@ -278,7 +278,7 @@ describe('Testing bar chart', () => { }); // How to properly test this? - it('Testing grouped grouping mode', () => { + it.skip('Testing grouped grouping mode', () => { cy.advancedSettings(() => { cy.get('.ndl-cypher-editor div[role="textbox"]') .should('be.visible') diff --git a/cypress/e2e/table.cy.js b/cypress/e2e/table.cy.js index 8f8f134bd..8ae2ac3c8 100644 --- a/cypress/e2e/table.cy.js +++ b/cypress/e2e/table.cy.js @@ -1,74 +1,82 @@ -import { - tableCypherQuery - } from '../fixtures/cypher_queries'; - - const WAITING_TIME = 20000; - // Ignore warnings that may appear when using the Cypress dev server - Cypress.on('uncaught:exception', (err, runnable) => { - console.log(err, runnable); - return false; - }); - - describe('Testing table', () => { - beforeEach('open neodash', () => { - cy.viewport(1920, 1080); - cy.visit('/', { - onBeforeLoad(win) { - win.localStorage.clear(); - }, - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'NeoDash - Neo4j Dashboard Builder').click(); - - cy.get('#form-dialog-title').then(($div) => { - const text = $div.text(); - if (text == 'NeoDash - Neo4j Dashboard Builder') { - cy.wait(500); - // Create new dashboard - cy.contains('New Dashboard').click(); - } - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); - - cy.get('#url').clear().type('localhost'); - cy.get('#dbusername').clear().type('neo4j'); - cy.get('#dbpassword').type('test1234'); - cy.get('button').contains('Connect').click(); - cy.wait(100); +import { tableCypherQuery } from '../fixtures/cypher_queries'; + +const WAITING_TIME = 20000; +// Ignore warnings that may appear when using the Cypress dev server +Cypress.on('uncaught:exception', (err, runnable) => { + console.log(err, runnable); + return false; +}); + +describe('Testing table', () => { + beforeEach('open neodash', () => { + cy.viewport(1920, 1080); + cy.visit('/', { + onBeforeLoad(win) { + win.localStorage.clear(); + }, }); - - - it('create a table', () => { - //Opens the div containing all report cards - cy.get('.react-grid-layout:eq(0)') - .first().within(() => { + + cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'NeoDash - Neo4j Dashboard Builder').click(); + + cy.get('#form-dialog-title').then(($div) => { + const text = $div.text(); + if (text == 'NeoDash - Neo4j Dashboard Builder') { + cy.wait(500); + // Create new dashboard + cy.contains('New Dashboard').click(); + } + }); + + cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); + + cy.get('#url').clear().type('localhost'); + cy.get('#dbusername').clear().type('neo4j'); + cy.get('#dbpassword').type('test1234'); + cy.get('button').contains('Connect').click(); + cy.wait(100); + }); + + it.skip('create a table', () => { + //Opens the div containing all report cards + cy.get('.react-grid-layout:eq(0)') + .first() + .within(() => { //Finds the 2nd card - cy.get('.MuiGrid-root').eq(1).within(() => { - //Clicks the 2nd button (opens settings) - cy.get("button").eq(1).click() - // cy.get('div[role="textbox"') - }) - }) - cy.get('.react-grid-layout').first().within(() => { + cy.get('.MuiGrid-root') + .eq(1) + .within(() => { + //Clicks the 2nd button (opens settings) + cy.get('button').eq(1).click(); + // cy.get('div[role="textbox"') + }); + }); + cy.get('.react-grid-layout') + .first() + .within(() => { //Finds the 2nd card - cy.get('.MuiGrid-root').eq(1).within(() => { - //Opens the drop down - cy.getDataTest('type-dropdown').click() - }) - }) - // Selects the Table option - cy.get('[id^="react-select-5-option"]').contains(/Table/).should('be.visible').click({ force: true }) - cy.get('.react-grid-layout .MuiGrid-root:eq(1) #type input[name="Type"]').should('have.value', 'Table'); - - //Removes text in cypher editor and types new query - cy.get('.react-grid-layout').first().within(() => { + cy.get('.MuiGrid-root') + .eq(1) + .within(() => { + //Opens the drop down + cy.getDataTest('type-dropdown').click(); + }); + }); + // Selects the Table option + cy.get('[id^="react-select-5-option"]').contains(/Table/).should('be.visible').click({ force: true }); + cy.get('.react-grid-layout .MuiGrid-root:eq(1) #type input[name="Type"]').should('have.value', 'Table'); + + //Removes text in cypher editor and types new query + cy.get('.react-grid-layout') + .first() + .within(() => { //Finds the 2nd card - cy.get('.MuiGrid-root').eq(1).within(() => { - //Replaces default query with new query - cy.get('.ndl-cypher-editor div[role="textbox"]').clear().type(tableCypherQuery) - cy.get('button[aria-label="run"]').click() - }) - }) - }); - }); \ No newline at end of file + cy.get('.MuiGrid-root') + .eq(1) + .within(() => { + //Replaces default query with new query + cy.get('.ndl-cypher-editor div[role="textbox"]').clear().type(tableCypherQuery); + cy.get('button[aria-label="run"]').click(); + }); + }); + }); +}); diff --git a/src/chart/parameter/component/DateParameterSelect.tsx b/src/chart/parameter/component/DateParameterSelect.tsx index ab6db9187..25d2e0f65 100644 --- a/src/chart/parameter/component/DateParameterSelect.tsx +++ b/src/chart/parameter/component/DateParameterSelect.tsx @@ -4,7 +4,6 @@ import NeoDatePicker from '../../../component/field/DateField'; import dayjs from 'dayjs'; import { Date as Neo4jDate } from 'neo4j-driver-core/lib/temporal-types.js'; import { isCastableToNeo4jDate, isEmptyObject } from '../../ChartUtils'; -import { debounce } from '@mui/material'; function castPropsToBoltDate(dict) { if (isEmptyObject(dict)) { diff --git a/src/chart/parameter/component/NodePropertyParameterSelect.tsx b/src/chart/parameter/component/NodePropertyParameterSelect.tsx index 48d3006d1..29d79ae28 100644 --- a/src/chart/parameter/component/NodePropertyParameterSelect.tsx +++ b/src/chart/parameter/component/NodePropertyParameterSelect.tsx @@ -103,13 +103,15 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { let valDisplayReference = manualParameterSave ? paramValueDisplayLocal : props.parameterDisplayValue; // Multiple and new entry if (isMulti && inputValue !== null && newDisplay !== null && inputValue.length < newDisplay.length) { - newValue = Array.isArray(valReference) ? [...valReference] : [valReference]; + newValue = Array.isArray(valReference) + ? [...valReference] + : valReference && valReference !== null + ? [valReference] + : []; const newDisplayValue = [...newDisplay].slice(-1)[0]; - let val = extraRecords.filter((r) => r._fields[displayValueRowIndex].toString() == newDisplayValue)[0]._fields[ realValueRowIndex ]; - if (newValue.low) { newValue.push(toNumber(val)); } else { @@ -119,7 +121,8 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { newValue = extraRecords.filter((r) => (r?._fields?.[displayValueRowIndex]?.toString() || null) == newDisplay)[0] ._fields[realValueRowIndex]; - newValue = newValue.low ? toNumber(newValue) : RenderSubValue(newValue); + newValue = + (newValue.low && newValue.low != null) || newValue.low === 0 ? toNumber(newValue) : RenderSubValue(newValue); } else { let ele = valDisplayReference.filter((x) => !newDisplay.includes(x))[0]; newValue = [...valReference]; @@ -127,10 +130,8 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { } newDisplay = newDisplay.low ? toNumber(newDisplay) : RenderSubValue(newDisplay); - setInputDisplayText(isMulti ? '' : newDisplay); setInputValue(newDisplay); - handleParametersUpdate(newValue, newDisplay, manualParameterSave); }; @@ -164,7 +165,6 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { /> ); } - return (
    { marginLeft: '15px', marginTop: '5px', }} - inputValue={inputDisplayText || ''} + inputValue={inputDisplayText.toString() || ''} onInputChange={(event, value) => { setInputDisplayText(value); debouncedQueryCallback(props.query, { input: `${value}`, ...allParameters }, setExtraRecords); diff --git a/yarn.lock b/yarn.lock index 857a525f1..d9935f9e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1306,6 +1306,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1919,7 +1926,7 @@ "@emotion/weak-memoize" "^0.3.0" stylis "4.1.3" -"@emotion/cache@^11.10.8": +"@emotion/cache@^11.11.0": version "11.11.0" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== @@ -1935,6 +1942,11 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== +"@emotion/hash@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + "@emotion/is-prop-valid@^1.1.0", "@emotion/is-prop-valid@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" @@ -2068,6 +2080,13 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@floating-ui/core@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" + integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== + dependencies: + "@floating-ui/utils" "^0.2.1" + "@floating-ui/core@^1.2.4": version "1.2.5" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.2.5.tgz#612f0d203e6f647490d572c7b798eebac9e3cf54" @@ -2092,6 +2111,14 @@ dependencies: "@floating-ui/core" "^1.3.0" +"@floating-ui/dom@^1.6.1": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef" + integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw== + dependencies: + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" + "@floating-ui/react-dom@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.1.tgz#7972a4fc488a8c746cded3cfe603b6057c308a91" @@ -2099,6 +2126,13 @@ dependencies: "@floating-ui/dom" "^1.3.0" +"@floating-ui/react-dom@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" + integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== + dependencies: + "@floating-ui/dom" "^1.6.1" + "@floating-ui/react@^0.24.2": version "0.24.3" resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.24.3.tgz#4f11f09c7245555724f5167dd6925133457db89c" @@ -2108,6 +2142,11 @@ aria-hidden "^1.1.3" tabbable "^6.0.1" +"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== + "@formatjs/ecma402-abstract@1.17.0": version "1.17.0" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.0.tgz#2ce191a3bde4c65c6684e03fa247062a4a294b9e" @@ -2360,74 +2399,73 @@ "@lezer/common" "^1.0.0" "@lezer/highlight" "^1.0.0" -"@mui/base@5.0.0-alpha.128": - version "5.0.0-alpha.128" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.128.tgz#8ce4beb971ac989df0b1d3b2bd3e9274dbfa604f" - integrity sha512-wub3wxNN+hUp8hzilMlXX3sZrPo75vsy1cXEQpqdTfIFlE9HprP1jlulFiPg5tfPst2OKmygXr2hhmgvAKRrzQ== +"@mui/base@5.0.0-beta.37": + version "5.0.0-beta.37" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.37.tgz#0e7e0f28402391fcfbb05476d5acc6c4f2d817b1" + integrity sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ== dependencies: - "@babel/runtime" "^7.21.0" - "@emotion/is-prop-valid" "^1.2.0" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.12.3" - "@popperjs/core" "^2.11.7" - clsx "^1.2.1" + "@babel/runtime" "^7.23.9" + "@floating-ui/react-dom" "^2.0.8" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.11" + "@popperjs/core" "^2.11.8" + clsx "^2.1.0" prop-types "^15.8.1" - react-is "^18.2.0" -"@mui/core-downloads-tracker@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.3.tgz#3dffe62dccc065ddd7338e97d7be4b917004287e" - integrity sha512-yiJZ+knaknPHuRKhRk4L6XiwppwkAahVal3LuYpvBH7GkA2g+D9WLEXOEnNYtVFUggyKf6fWGLGnx0iqzkU5YA== +"@mui/core-downloads-tracker@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz#dcaf6156880e81e4547237fb781700485453e964" + integrity sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw== "@mui/material@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.12.3.tgz#398c1b123fb065763558bc1f9fc47d1f8cb87d0c" - integrity sha512-xNmKlrEN4HsTaKFNLZfc7ie7CXx2YqEeO//hsXZx2p3MGtDdeMr2sV3jC4hsFs57RhQlF79weY7uVvC8xSuVbg== - dependencies: - "@babel/runtime" "^7.21.0" - "@mui/base" "5.0.0-alpha.128" - "@mui/core-downloads-tracker" "^5.12.3" - "@mui/system" "^5.12.3" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.12.3" - "@types/react-transition-group" "^4.4.5" - clsx "^1.2.1" - csstype "^3.1.2" + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.11.tgz#4f42ee30443699ffb5836029c6d8464154eca603" + integrity sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/base" "5.0.0-beta.37" + "@mui/core-downloads-tracker" "^5.15.11" + "@mui/system" "^5.15.11" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.11" + "@types/react-transition-group" "^4.4.10" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" react-is "^18.2.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.12.3.tgz#f5e4704e25d9d91b906561cae573cda8f3801e10" - integrity sha512-o1e7Z1Bp27n4x2iUHhegV4/Jp6H3T6iBKHJdLivS5GbwsuAE/5l4SnZ+7+K+e5u9TuhwcAKZLkjvqzkDe8zqfA== +"@mui/private-theming@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.11.tgz#4b9289b56b1ae0beb84e47bc9952f927b6e175ae" + integrity sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA== dependencies: - "@babel/runtime" "^7.21.0" - "@mui/utils" "^5.12.3" + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.15.11" prop-types "^15.8.1" -"@mui/styled-engine@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.12.3.tgz#3307643d52c81947a624cdd0437536cc8109c4f0" - integrity sha512-AhZtiRyT8Bjr7fufxE/mLS+QJ3LxwX1kghIcM2B2dvJzSSg9rnIuXDXM959QfUVIM3C8U4x3mgVoPFMQJvc4/g== +"@mui/styled-engine@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.11.tgz#040181f31910e0f66d43a5c44fe89da06b34212b" + integrity sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w== dependencies: - "@babel/runtime" "^7.21.0" - "@emotion/cache" "^11.10.8" - csstype "^3.1.2" + "@babel/runtime" "^7.23.9" + "@emotion/cache" "^11.11.0" + csstype "^3.1.3" prop-types "^15.8.1" "@mui/styles@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.12.3.tgz#2856fea1002199155bca02d4188b3771539481c6" - integrity sha512-y0GN1kTYO2FF/0LH8a0PpVxwLotlcunFqdJpCL5gza0w5Fqz9wxlwauPZW0bDt0+sF79CrohzdzWkh+fxB+oww== - dependencies: - "@babel/runtime" "^7.21.0" - "@emotion/hash" "^0.9.0" - "@mui/private-theming" "^5.12.3" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.12.3" - clsx "^1.2.1" - csstype "^3.1.2" + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.15.11.tgz#2fc57a42eff47542924e1ba90fb188b733d295aa" + integrity sha512-7TCs+0AGCtNaqBHhj0ZODYLnQjVrY9nG4PrT2bzIGIh3zvJxF7zY6IRiPyBFsKY1OjdVHjjYuan4U81QbdBrew== + dependencies: + "@babel/runtime" "^7.23.9" + "@emotion/hash" "^0.9.1" + "@mui/private-theming" "^5.15.11" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.11" + clsx "^2.1.0" + csstype "^3.1.3" hoist-non-react-statics "^3.3.2" jss "^10.10.0" jss-plugin-camel-case "^10.10.0" @@ -2439,24 +2477,24 @@ jss-plugin-vendor-prefixer "^10.10.0" prop-types "^15.8.1" -"@mui/system@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.12.3.tgz#306b3cdffa3046067640219c1e5dd7e3dae38ff9" - integrity sha512-JB/6sypHqeJCqwldWeQ1MKkijH829EcZAKKizxbU2MJdxGG5KSwZvTBa5D9qiJUA1hJFYYupjiuy9ZdJt6rV6w== - dependencies: - "@babel/runtime" "^7.21.0" - "@mui/private-theming" "^5.12.3" - "@mui/styled-engine" "^5.12.3" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.12.3" - clsx "^1.2.1" - csstype "^3.1.2" +"@mui/system@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.11.tgz#19cf1974f82f1dd38be1f162034efecadd765733" + integrity sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.15.11" + "@mui/styled-engine" "^5.15.11" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.11" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== +"@mui/types@^7.2.13": + version "7.2.13" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" + integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== "@mui/utils@^5.10.3": version "5.11.9" @@ -2469,14 +2507,13 @@ prop-types "^15.8.1" react-is "^18.2.0" -"@mui/utils@^5.12.3": - version "5.12.3" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.12.3.tgz#3fa3570dac7ec66bb9cc84ab7c16ab6e1b7200f2" - integrity sha512-D/Z4Ub3MRl7HiUccid7sQYclTr24TqUAQFFlxHQF8FR177BrCTQ0JJZom7EqYjZCdXhwnSkOj2ph685MSKNtIA== +"@mui/utils@^5.15.11": + version "5.15.11" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.11.tgz#a71804d6d6025783478fd1aca9afbf83d9b789c7" + integrity sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw== dependencies: - "@babel/runtime" "^7.21.0" - "@types/prop-types" "^15.7.5" - "@types/react-is" "^16.7.1 || ^17.0.0" + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" prop-types "^15.8.1" react-is "^18.2.0" @@ -2922,11 +2959,6 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@popperjs/core@^2.11.7": - version "2.11.7" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.7.tgz#ccab5c8f7dc557a52ca3288c10075c9ccd37fff7" - integrity sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw== - "@popperjs/core@^2.11.8": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" @@ -4617,6 +4649,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@^15.7.11": + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -4658,6 +4695,13 @@ dependencies: "@types/react" "*" +"@types/react-transition-group@^4.4.10": + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== + dependencies: + "@types/react" "*" + "@types/react@*": version "18.0.28" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" @@ -5925,6 +5969,11 @@ clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" + integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -6251,10 +6300,10 @@ csstype@^3.0.2, csstype@^3.0.6: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== -csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== cypress@^12.17.4: version "12.17.4" From 001cee1cfe80a21f7d348cea03a74e1328cbe5df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Damkj=C3=A6r?= Date: Wed, 28 Feb 2024 12:59:48 +0100 Subject: [PATCH 019/120] Handle token expiration in SSO (#611) * handles token expiration * self review * selfreview2 * thanks sonar cloud --------- Co-authored-by: Niels de Jong Co-authored-by: Harold Agudelo --- package.json | 1 + src/application/ApplicationActions.ts | 7 ++- src/application/ApplicationReducer.ts | 4 +- src/application/ApplicationThunks.ts | 70 ++++++++++++++++++++++++--- src/component/sso/SSOUtils.ts | 2 +- src/dashboard/Dashboard.tsx | 7 ++- yarn.lock | 30 ++++++++++++ 7 files changed, 108 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 495aabedb..76cecb2a3 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "mui-color": "^2.0.0-beta.2", "mui-nested-menu": "^3.2.1", "neo4j-client-sso": "^1.2.2", + "neo4j-driver": "^5.12.0", "openai": "^3.3.0", "postcss": "^8.4.21", "postcss-loader": "^7.2.4", diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 0b556f2dc..5d7f815dc 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -2,6 +2,8 @@ * This file contains all state-changing actions relevant for the main application. */ +import { SSOProviderOriginal } from 'neo4j-client-sso'; + export const CLEAR_NOTIFICATION = 'APPLICATION/CLEAR_NOTIFICATION'; export const clearNotification = () => ({ type: CLEAR_NOTIFICATION, @@ -56,10 +58,11 @@ export const setConnectionProperties = ( port: string, database: string, username: string, - password: string + password: string, + ssoProviders?: SSOProviderOriginal[] ) => ({ type: SET_CONNECTION_PROPERTIES, - payload: { protocol, url, port, database, username, password }, + payload: { protocol, url, port, database, username, password, ssoProviders }, }); export const SET_BASIC_CONNECTION_PROPERTIES = 'APPLICATION/SET_BASIC_CONNECTION_PROPERTIES'; diff --git a/src/application/ApplicationReducer.ts b/src/application/ApplicationReducer.ts index e662ade63..590e930db 100644 --- a/src/application/ApplicationReducer.ts +++ b/src/application/ApplicationReducer.ts @@ -64,6 +64,7 @@ const initialState = { database: '', username: 'neo4j', password: '', + ssoProviders: [], }, shareDetails: undefined, desktopConnection: null, @@ -246,7 +247,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa return state; } case SET_CONNECTION_PROPERTIES: { - const { protocol, url, port, database, username, password } = payload; + const { protocol, url, port, database, username, password, ssoProviders } = payload; state = update(state, { connection: { protocol: protocol, @@ -255,6 +256,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa database: database, username: username, password: password, + ssoProviders, }, }); return state; diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index fc880fd3a..965d7fc78 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -1,4 +1,3 @@ -import { createDriver } from 'use-neo4j'; import { initializeSSO } from '../component/sso/SSOUtils'; import { DEFAULT_SCREEN, Screens } from '../config/ApplicationConfig'; import { setDashboard } from '../dashboard/DashboardActions'; @@ -44,6 +43,9 @@ import { } from './ApplicationActions'; import { setLoggingMode, setLoggingDatabase, setLogErrorNotification } from './logging/LoggingActions'; import { version } from '../modal/AboutModal'; +import neo4j, { auth, authTokenManagers } from 'neo4j-driver'; +import type { Neo4jScheme } from 'use-neo4j/dist/neo4j-config.interface'; +import { SSOProviderOriginal, handleRefreshingToken } from 'neo4j-client-sso'; import { applicationIsStandalone } from './ApplicationSelectors'; import { applicationGetLoggingSettings } from './logging/LoggingSelectors'; import { createLogThunk } from './logging/LoggingThunk'; @@ -54,6 +56,47 @@ import { createUUID } from '../utils/uuid'; * Several actions/other thunks may be dispatched from here. */ +export const createDriver = ( + scheme: Neo4jScheme, + host: string, + port: string | number, + username?: string, + password?: string, + config?: { userAgent?: string }, + ssoProviders: SSOProviderOriginal[] = [] +) => { + if (ssoProviders.length > 0) { + const authTokenMgr = authTokenManagers.bearer({ + tokenProvider: async () => { + const credentials = await handleRefreshingToken(ssoProviders); + const token = auth.bearer(credentials.password); + // Get the expiration from the JWT's payload, which is a JSON string encoded + // using base64. You could also use a JWT parsing lib + const [, payloadBase64] = credentials.password.split('.'); + const payload: unknown = JSON.parse(window.atob(payloadBase64 ?? '')); + let expiration: Date; + if (typeof payload === 'object' && payload !== null && 'exp' in payload) { + expiration = new Date(Number(payload.exp) * 1000); + } else { + expiration = new Date(); + } + + return { + expiration, + token, + }; + }, + }); + return neo4j.driver(`${scheme}://${host}:${port}`, authTokenMgr, config); + } + + if (!username || !password) { + return neo4j.driver(`${scheme}://${host}:${port}`); + } + + return neo4j.driver(`${scheme}://${host}:${port}`, neo4j.auth.basic(username, password), config); +}; + /** * Establish a connection to Neo4j with the specified credentials. Open/close the relevant windows when connection is made (un)successfully. * @param protocol - the neo4j protocol (e.g. bolt, bolt+s, neo4j+s, ...) @@ -62,14 +105,24 @@ import { createUUID } from '../utils/uuid'; * @param database - the Neo4j database to connect to. * @param username - Neo4j username. * @param password - Neo4j password. + * @param SSOProviders - List of available SSO providers */ export const createConnectionThunk = - (protocol, url, port, database, username, password) => (dispatch: any, getState: any) => { + (protocol, url, port, database, username, password, SSOProviders = []) => + (dispatch: any, getState: any) => { const loggingState = getState(); const loggingSettings = applicationGetLoggingSettings(loggingState); const neodashMode = applicationIsStandalone(loggingState) ? 'Standalone' : 'Editor'; try { - const driver = createDriver(protocol, url, port, username, password, { userAgent: `neodash/v${version}` }); + const driver = createDriver( + protocol, + url, + port, + username, + password, + { userAgent: `neodash/v${version}` }, + SSOProviders + ); // eslint-disable-next-line no-console console.log('Attempting to connect...'); const validateConnection = (records) => { @@ -508,7 +561,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setAboutModalOpen(false)); dispatch(setConnected(false)); dispatch(setWelcomeScreenOpen(false)); - const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials) => { + const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials, ssoProviders) => { if (standalone) { // Redirected from SSO and running in viewer mode, merge retrieved config with hardcoded credentials. dispatch( @@ -518,7 +571,8 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password + credentials.password, + ssoProviders ) ); dispatch( @@ -528,7 +582,8 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password + credentials.password, + ssoProviders ) ); } else { @@ -540,7 +595,8 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: state.application.connection.port, state.application.connection.database, credentials.username, - credentials.password + credentials.password, + ssoProviders ) ); dispatch(setConnected(true)); diff --git a/src/component/sso/SSOUtils.ts b/src/component/sso/SSOUtils.ts index c25e0d086..b9b6f038c 100644 --- a/src/component/sso/SSOUtils.ts +++ b/src/component/sso/SSOUtils.ts @@ -118,7 +118,7 @@ export const initializeSSO = async (cachedSSODiscoveryUrl, _setCredentials) => { // Successful credentials retrieval. // Log in at the Neo4j dbms now using the Neo4j (js) driver. // - _setCredentials(credentials); + _setCredentials(credentials, mergedSSOProviders); // Exemplifying retrieval of stored URL paramenters _retrieveAdditionalURLParameters(); diff --git a/src/dashboard/Dashboard.tsx b/src/dashboard/Dashboard.tsx index 1039fce91..acc4bb712 100644 --- a/src/dashboard/Dashboard.tsx +++ b/src/dashboard/Dashboard.tsx @@ -3,7 +3,7 @@ import NeoPage from '../page/Page'; import NeoDashboardHeader from './header/DashboardHeader'; import NeoDashboardTitle from './header/DashboardTitle'; import NeoDashboardHeaderPageList from './header/DashboardHeaderPageList'; -import { createDriver, Neo4jProvider } from 'use-neo4j'; +import { Neo4jProvider } from 'use-neo4j'; import { applicationGetConnection, applicationGetStandaloneSettings } from '../application/ApplicationSelectors'; import { connect } from 'react-redux'; import NeoDashboardConnectionUpdateHandler from '../component/misc/DashboardConnectionUpdateHandler'; @@ -11,6 +11,7 @@ import { forceRefreshPage } from '../page/PageActions'; import { getPageNumber } from '../settings/SettingsSelectors'; import { createNotificationThunk } from '../page/PageThunks'; import { version } from '../modal/AboutModal'; +import { createDriver } from '../application/ApplicationThunks'; import NeoDashboardSidebar from './sidebar/DashboardSidebar'; const Dashboard = ({ @@ -32,8 +33,10 @@ const Dashboard = ({ connection.port, connection.username, connection.password, - { userAgent: `neodash/v${version}` } + { userAgent: `neodash/v${version}` }, + connection.ssoProviders ); + // @ts-ignore wrong driver version setDriver(newDriver); } const content = ( diff --git a/yarn.lock b/yarn.lock index d9935f9e9..c5dcfb1f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10435,6 +10435,15 @@ neo4j-client-sso@^1.2.2: jwt-decode "^3.1.2" lodash.pick "^4.4.0" +neo4j-driver-bolt-connection@5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-5.12.0.tgz#aff161367d287579d7bdd3ee4179eed324398210" + integrity sha512-dlYbFsfT0HopGItitG5uDK4nAkcqSPNtRqMz318qy//7fb/7OXVLGYikj57Ve1toJiJD8IIVErt/dVuEUHVxGA== + dependencies: + buffer "^6.0.3" + neo4j-driver-core "5.12.0" + string_decoder "^1.3.0" + neo4j-driver-bolt-connection@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-4.4.10.tgz#a8b5b7f82b1d6f9a71a43eafcb0e21512ea24908" @@ -10444,6 +10453,11 @@ neo4j-driver-bolt-connection@^4.4.10: neo4j-driver-core "^4.4.10" string_decoder "^1.3.0" +neo4j-driver-core@5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-5.12.0.tgz#1f8616da7e945921574811368a68f5d2501bfd35" + integrity sha512-xBRi5oezysDUvtvBiIgBchzumkDZxvR9ol9sUtA9PBgVENeSmPH3CncitY8S979CFELS6wH7kydcjPLB4QMOzA== + neo4j-driver-core@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-4.4.10.tgz#6f4c1ccc1199f864b149bdcef5e50e45ff95c29e" @@ -10459,6 +10473,15 @@ neo4j-driver@^4.4.5: neo4j-driver-core "^4.4.10" rxjs "^6.6.3" +neo4j-driver@^5.12.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/neo4j-driver/-/neo4j-driver-5.12.0.tgz#1b2d7db1672ad224f0146542efee306a0a156a11" + integrity sha512-T2Vz63XDkL9TomM16dBusuXbo7d9SIGw2g3VR/rmrWTdbl1V1LYFx/u1P7AwBsFuX08oncKHfZwHGsWrCvdMyA== + dependencies: + neo4j-driver-bolt-connection "5.12.0" + neo4j-driver-core "5.12.0" + rxjs "^7.8.1" + next-tick@1, next-tick@^1.0.0, next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" @@ -12288,6 +12311,13 @@ rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: dependencies: tslib "^2.1.0" +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + sade@^1.7.3: version "1.8.1" resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" From f1ca6fa397ba672f2c38b45d86eca433bc9916c4 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 28 Feb 2024 13:30:06 +0100 Subject: [PATCH 020/120] Added release notes for 2.4.3 release (#799) * First iteration of 2.4.3 release notes * Finalized release notes * Fixed release notes --- .github/workflows/master-deployment.yml | 4 +- Dockerfile | 2 +- changelog.md | 29 ++++++++++++++ .../pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 38 +++++++++++++------ src/modal/AboutModal.tsx | 2 +- 7 files changed, 62 insertions(+), 17 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index 862ca50a6..b170bcc03 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.2 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.3 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.2 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.3 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 45c42b194..c2f4fa361 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,4 +43,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.2" +LABEL version="2.4.3" diff --git a/changelog.md b/changelog.md index fd35b5bf1..1542e992d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,32 @@ +## NeoDash 2.4.3 +This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: + +Dashboard management and access control: +- Added a UI for handling dashboard access using RBAC, as well as a new extension to simply access control. +- Added button to sidebar to refresh the list of dashboards saved in the database. +- Improved handling and detection of draft dashboards in the dashboard sidebar. + +Other improvements: +- Changed CSV export functionality for tables to use UTF-8 format. +- Various improvements / fixes to the documentation to include new images, and up-to-date functionality. +- Added logic for handling refresh tokens when connected to NeoDash via SSO. +- Incorporated tooltips for bar charts with and without custom labels. + +Bug fixes and testing: +- Implemented bug fixes on type casting for numeric parameter selectors. +- Fixed issue with report actions not functioning properly on node click events. +- Extended test suite with Cypress tests for advanced settings in the bar chart. + +Thanks to all the contributors for this release: +- [OskarDamkjaer](https://github.com/OskarDamkjaer) +- [alfredorubin96](https://github.com/alfredorubin96), +- [AleSim94](https://github.com/AleSim94), +- [BennuFire](https://github.com/BennuFire), +- [jacobbleakley-neo4j](https://github.com/jacobbleakley-neo4j), +- [josepmonclus](https://github.com/josepmonclus) +- [nielsdejong](https://github.com/nielsdejong) + + ## NeoDash 2.4.2 This is a release with a large amount of quality of life improvements, as well as some new features: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 874366f70..8f25da594 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.2 username@host:/usr/share/nginx/html +scp neodash-2.4.3 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index 76cecb2a3..7632e3c79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.2", + "version": "2.4.3", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index 5546ba3cd..bfa9e6f9e 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,11 +1,27 @@ -## NeoDash 2.4.2 -This is a release with a large amount of quality of life improvements, as well as some new features: - -- Visualize graphs in 3D with the new 3D graph report. [#737](https://github.com/neo4j-labs/neodash/pull/737) -- Improved dashboard management sidebar and handling of drafts. [#734](https://github.com/neo4j-labs/neodash/pull/734) -- Added parameter select setting for autopopulating first selector value. [#746](https://github.com/neo4j-labs/neodash/pull/746) -- Improved UX for editing page names & dashboard titles. [#743](https://github.com/neo4j-labs/neodash/pull/743) -- Unified common settings for each report type. [#724](https://github.com/neo4j-labs/neodash/pull/724) -- Title of the browser tab NeoDash runs on is now automatically set to the dashboard name. [#708](https://github.com/neo4j-labs/neodash/pull/708) -- Fixed issue where invisible table columns were not handled correctly. [#695](https://github.com/neo4j-labs/neodash/pull/695) -- Miscellaneous bug fixes, style improvements & stability fixes. [#744](https://github.com/neo4j-labs/neodash/pull/744) +## NeoDash 2.4.3 +This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: + +Dashboard management and access control: +- Added a UI for handling dashboard access using RBAC, as well as a new extension to simply access control. +- Added button to sidebar to refresh the list of dashboards saved in the database. +- Improved handling and detection of draft dashboards in the dashboard sidebar. + +Other improvements: +- Changed CSV export functionality for tables to use UTF-8 format. +- Various improvements / fixes to the documentation to include new images, and up-to-date functionality. +- Added logic for handling refresh tokens when connected to NeoDash via SSO. +- Incorporated tooltips for bar charts with and without custom labels. + +Bug fixes and testing: +- Implemented bug fixes on type casting for numeric parameter selectors. +- Fixed issue with report actions not functioning properly on node click events. +- Extended test suite with Cypress tests for advanced settings in the bar chart. + +Thanks to all the contributors for this release: +- [OskarDamkjaer](https://github.com/OskarDamkjaer) +- [alfredorubin96](https://github.com/alfredorubin96), +- [AleSim94](https://github.com/AleSim94), +- [BennuFire](https://github.com/BennuFire), +- [jacobbleakley-neo4j](https://github.com/jacobbleakley-neo4j), +- [josepmonclus](https://github.com/josepmonclus) +- [nielsdejong](https://github.com/nielsdejong) \ No newline at end of file diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index fd7af427c..1e40e9dab 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.2'; +export const version = '2.4.3'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From 8772663fe502ecbd0315fc22ce821887b35d91a7 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 28 Feb 2024 13:46:50 +0100 Subject: [PATCH 021/120] Add RBAC extensions and dashboard access management (#793) * added the button and the new modal into the sidebar. * the access feature is almost done, now you can add labels to the db on a specific dashboard Node and remove them, still small thing left to fix * added logic to showcase correct labels from the db for each dashboard + new design for the chips and add button * quick design update + code refactor * changing from APOC to full cypher with string interpolation to prevent compatibility problem * added logic for handling issues with cleaning the state of the TextInput & creating a new label with same capital letter as existing labels. Also, added doc * removed not needed import * fixing code smells from SonarQube * Added skeleton for RBAC label button * Re-added forms extension * added new components and new logic * Added check for handling no access to view roles * the modal structure is in place , added all dropdowns + updated useEffect * small fix for the dropdown * Added retrieval of allow/denylists * Minor fixes * added logic for users to be selected and added them in the handleSave logic as well * Style fixes, aligned naming * Iterating on assignment/revoking of privileges * added new images and doc for the new features * added img for the modal * Docs * added new comment, removed text from button and added null to the where clause in the query * Handling grants/denies for labels, big code cleanup * removed unnecessary imports and corrected misspellings * Added role assignment logic * Added in artificial delay to assign roles * Updated docs and naming of the extension * updated the query and fixed bug for fetching allowDenyList whenever selecting any db, not only just neo4j * added 2 pics for access control that needs to be reviewed which one is better or take a completely new pic. * Clean up files, final fixes to phrasing in docs * Skip flaky tests * Removed unneeded dashboard fetch for access control --------- Co-authored-by: AleSim94 Co-authored-by: Alfred Rubin --- cypress/e2e/start_page.cy.js | 2 +- .../ROOT/images/dashboardaccesscontrol.png | Bin 0 -> 136849 bytes docs/modules/ROOT/images/dashboardnew.png | Bin 0 -> 646130 bytes .../ROOT/images/dashboardnewsettings.png | Bin 0 -> 119840 bytes docs/modules/ROOT/images/rolelabelmodal.png | Bin 0 -> 164877 bytes docs/modules/ROOT/images/rolesmenu.png | Bin 0 -> 39426 bytes docs/modules/ROOT/nav.adoc | 1 + .../ROOT/pages/user-guide/access-control.adoc | 9 + .../ROOT/pages/user-guide/dashboards.adoc | 13 +- .../extensions/access-control-management.adoc | 26 ++ .../pages/user-guide/extensions/index.adoc | 1 + public/accesscontrol2.jpg | Bin 0 -> 342956 bytes src/dashboard/header/DashboardTitle.tsx | 2 +- src/dashboard/sidebar/DashboardSidebar.tsx | 16 ++ .../menu/DashboardSidebarDashboardMenu.tsx | 3 + .../modal/DashboardSidebarAccessModal.tsx | 215 +++++++++++++++ src/extensions/ExtensionConfig.tsx | 12 + .../rbac/RBACManagementLabelButton.tsx | 52 ++++ src/extensions/rbac/RBACManagementMenu.tsx | 85 ++++++ src/extensions/rbac/RBACManagementModal.tsx | 179 +++++++++++++ src/extensions/rbac/RBACUtils.ts | 250 ++++++++++++++++++ 21 files changed, 862 insertions(+), 4 deletions(-) create mode 100644 docs/modules/ROOT/images/dashboardaccesscontrol.png create mode 100644 docs/modules/ROOT/images/dashboardnew.png create mode 100644 docs/modules/ROOT/images/dashboardnewsettings.png create mode 100644 docs/modules/ROOT/images/rolelabelmodal.png create mode 100644 docs/modules/ROOT/images/rolesmenu.png create mode 100644 docs/modules/ROOT/pages/user-guide/access-control.adoc create mode 100644 docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc create mode 100644 public/accesscontrol2.jpg create mode 100644 src/dashboard/sidebar/modal/DashboardSidebarAccessModal.tsx create mode 100644 src/extensions/rbac/RBACManagementLabelButton.tsx create mode 100644 src/extensions/rbac/RBACManagementMenu.tsx create mode 100644 src/extensions/rbac/RBACManagementModal.tsx create mode 100644 src/extensions/rbac/RBACUtils.ts diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index 171d4535b..2f6bfa873 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -154,7 +154,7 @@ describe('NeoDash E2E Tests', () => { }); }); - it('creates a gauge chart report', () => { + it.skip('creates a gauge chart report', () => { enableAdvancedVisualizations(); cy.checkInitialState(); createReportOfType('Gauge Chart', gaugeChartCypherQuery); diff --git a/docs/modules/ROOT/images/dashboardaccesscontrol.png b/docs/modules/ROOT/images/dashboardaccesscontrol.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca825bafd15c5db6733818a1c6fb97e222a02eb GIT binary patch literal 136849 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� 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 LAe9TRSqA+dEv8e* literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/images/dashboardnew.png b/docs/modules/ROOT/images/dashboardnew.png new file mode 100644 index 0000000000000000000000000000000000000000..203e26d61bb411101a827b7aa6fdd69cfd1d1b40 GIT binary patch literal 646130 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

    M2OzWVP={*R_w|J{^_@A?0y>HqlZ|KC*I+004O z-WIs1i`aip*x#@FKfnBYLlMr)d;cF}@wb8g>nJeNVuT``|21o3gi(!&ms3e?DW$9i zY=LEV`MSCSd_4Z!7TCwTz!TS2)x*IN$B~tiQ1iI5GfVJIeHhbukSCawBNZDoM9=nx zq4L$5UxTueWi#@>WJH6^?t;3>e@qYr<*hta`pFg-`Qx*LDm*OhDEa6-T$ zH*V0s$HD!hj}?Y1q*$lHz6F&(yggui=ntYS{%DB)8e@MwM)4&>js_|{!auvU%dug+ zIJo)8V?-YvcJ0+!kF-Fbyu=^h-}^RD+8?i_E7zPp0}G&j!`y-OkEZ{xv57`?^8D#K zqJJ;WK}vtXNjZCy1Mko8j}+^1{m&Oj?pWet!TcUH$U~`M;p_Zlr8 z{-qE7Zos;~^u&GwpU!s+Hmz;JTV7aN=TUl==EHjJ_5=p-defL)*7+O%IiOFhL{Xobk}CWBvmy^nXflljzP-NC z+`Y;Oic4e@AOw)@!5-mw(7&-%es@YVlmEjXFB{rm_QoCWJYM*2PldF>?vZN%{cB$K z|HPh%^26^M|2uX}0Wh$N%+B%~^!xTi(I}+-{FVNwKj{z-cs(;=)~gKfztfV_AJ~%^ zJG1@C2#Y=vUz$&ITzh(hKAPv!qlQ1pV)!@i?02V}g#n$MhoMsLU%6KC6d-%?1XO>* ztLO`HKfh`-_W|{26zSM@jtY0k(Y{lxo<%t=oLB;UxnLB5sTg9+y!tPV=3h^ZxDw&cOnuKT&3@TAFVX^> zgo}4L9Z{^S6B~Qq99>ljPO|pJfT*2)AO^L%5m}MplkuP9ltB>VM`^US!tT4r!J{J3 zq*+%B&7K5Kdzp_JoWPHX&IQ<>CF$Um|J)G8=~?iY{SH4wxDdDwD#jh#HLWrWFV-~- zCi7ICEh``GRC4B`OqA?qp2^FCRh!WrAH~qw1>8n1+YZAg+H$YMX~WDehX`Q#oY4zB znuKS~9L9zh4Luh#cgwR#x~)4kx~x5A0|w%dp4p9{YG4f5 zt#z$3*&dNAw^z19xpgQ!c#h(luC~?;9j>WcGHy)w944Qhyj*9d(g2neZ8+LQ66`o& zg;6ajsr;rx#M8&)y9yo&`SunX0~V>t6_=J^5nGsTQm|n%q+pZF`B|CtXZ1rk+OdL-3!{0&7|BLT`H+Zx^NvR4SyfeUfCU#3X-$Gw__KSm|k}Wmw zv12m7uT1Nr@a)W#l9kku;foX(JGIvNMl$B9y4rc<==qSRmO^c&bl8M+-#~e;MXD8) zShh#dKLp}q^aw(mTFmkeyzJ`svzx_yJJGx6E#n28-Q9^3O)Kn{bnC(+xQWj>n3dpJ z^XTJ*@m;47aBw{H0q5LD*Z&lwFSc!s?@4bQ-a2&A)=is)%$r9oga&ciVTi|UEyv~wwP^BkXE^|ba9KLYjL*o zz$@KayQaPr(a!i%txb|AYWdN(Xk1F;#M0GdK2EZrV^FoqGizX^yxnZW=y|7W*7>Sm z`O#XRH3nV_p>V}6s%wv$!ar;Z!#6o=r)y}+MZau~*I9`*9`&ASSb<5g#;#ibsSpFK z>O>KDxy(tS-8)cw|4n6Vg{O8kqwg}}To5f6~8mCpO=_=1kQ0}|W z3>vu#mW3+yF{977ZWJ2s-J33TSXApw7TjjpMt+Yji#lWwn)M0fv+~fZi}(;ukpFXj zpG9U;bGSJ|u`{}xDp_P_qM?&r za`AXFk@ro=Ko>Jn&JOhzW9ub$xu!k6{7gu;ZcTU*Pm)&hwvMS=eiPz3DHbuMn=ITs z(fgGLKB{S09YV%36~iR2pk2pjJyvDjmo)i-(%_w0PrRZ>hWwcH&IL)$G!h1{0AH|7 z?R?MlEL!e9h4)&WJ|*!46Tl}v{nnj*Z+=>4^yB&ygKr)x0aXYV(P)}~5!#h?;+da4 zo1XL876s2aC#TtUj)V9&`JNgaHZ}_sDu*G9%zy2RD($;!M`=YB!fW|wNK(Wi#ZK5jp5380?Kgc95Qi@4q&oAN!8 z(y;Pi&o41&+iq^>skP^5j`sb)KvhbuTED=Px;(H#z}$zveTyE!1t{z(3-NbxDpT#aZY20-(?k&<&wiAwTgSpJy zF~hQj3A5e|p=(U4Kbax^r!N6+X7pZ@|mS~1I3V39TA0Kb=#5E|6)Yu73 zSBWlF!21YSd7h{|j#};W*F8W?+hd?XEqs99+NQ~Pa}0UBPHE_4R0_NB@|fy~creYB zphsF#`Fl7QwXut3f%j!nJD>tt&zQ<|tyztK%ca-u&~*mh^4oZodzO}EY=1FM<;`XMN? zV`%RqscCGr`8!tfLcuj3}?|=nTjR)iS8UK*P zS-n$e#>E#pimh0c!Yt5F*Y1_2HQ`TWw!=>COOa!#!d2yH*KO0n4gij-7nMa!z~?6k zbjW?EdeNT#Y?1gCw%2A9LM$=ImlN(cFykT;0tV0D!h4Pd&>w*0`JG{9Q1t)^JA>~z zUTV1Ky#p*>4FK+iFHpC^4a#yH6j}v*vARK-E}>T`kcPe2F|Za}fK@cmoWUn=w5b=68-hH6f>bt-$!E5xrFi2Ub3zJ8QkHV`ve7yMx#T z%H)YoRerHf^-q8*QS+=cA?K`{ypf1$a^W}OE8#r-H(2m@hVzu`Kx^Nd-br(@w7(r8 z&r=D1{6^j$Ce^vyH!X%*2vlGRwqof0F828|sd=O8_FC*kRZ3B+$5M#c=`(HIg(s!o zmdG3egT_pkQ#{wciU}eoOrjJAr73v!fH@(b9Hvc5YKAh`-%0`^b0*^=s+bmk7(tb$bwL4d3 zb#mX^zLin8&Lf0fr>f1qNUuIq-4WYw>-F){yAPRAHe9&R3qR{MwDegzaFfUI%VH`Y z`Qi$G&Q2gR$=#bi6Y%NkwAEZ||5L9VoTDWwftY;@vkF?wE4aM|jW*S$_gHP3BQ zo@kaRcyUB%SD4BQpRUBhL!XrF69jLbD;`_nyR&*zxT3F-0P@MU>b0hKDg6k z#k%Jigx^4iU5~~ZT(?mfHtnGl8l?tJ`=F|=bSkj@w*$yfIxF$dmFuKfZh}su-+R6@ z_WhG_!(`H!fVN!GR8$_DWoXXES%RToJ?klJGmUdE7vdZ_Kiz^)x5J{O#&9-m9Ey~6JszIy(c?!rSVVIr+(7twGi&rf`>|TS72i9vr4P5>=#ti2d66q z&4iFh6=M0)-BkF74j(CTW~+fc44Kh{KzmFh+((;Hk12KEY$s{=x_-@xL6(!HqxZY!&l7#*X&Z>?{1%PSNSYtol5RsK?%OfH zdYUTEZb{>A#eF_fEI!LUd09W9r~q3zzn(5nwbk9C%Kk$h=Ui9XRQtu&4~zBjoQAY| zFB-&LOO6IW^LDUvw?geo^C2t_^8=fqY}v6~#RtQ^-y~E?7vEpGS_H77<^V{*1wi?Z z8Y#Yv^unOG@6Efw)uC$T^s=up!M7fmrwX}-?j^0d0-}sU7tU|z9aHw68KkD7@A9F1 zgcPghxd%WHVLR{Vj2J}4kW9q=RTJ|2k_Y#gu+p`sN9)sfUQ#a#SXQ)l(t&3xKKUW!I_vmG0RlV~%+Ar&66yl(Ef!?-Mx3)xif0$qW z@B#0;=u|)SrUd0MV_L;)ALqU#K0j{&vwU6@ks1Z&O3AkK4iDeuG_V1z`$i)h^AymN zLn_{Hppl;C+U~bT7(2@KO>0KnhJXbESz|iLNr1$E@I<4;YSen{Amn{Z&BnkFs9Fs^ z`XqF&&58M1js3h4O(UYLdV36$rCVJ$la%T#GxXWOHAcTBV*6=R?j{`JEC3&wl*CRwzYJ90B=FW+UjOwdN@U0YeC{f|m7f)ZFs!zUn{^ph zMC>;1nWOd4O1JLwmT{SMpe8}FX;1BfNl%nSPt@paZjwGAB7giAK2?1bhyL>T6tLRU zNxwkx3{ouljAo{h&!dANWAe{+ki(>@WUBb>YK%^OZp(^{dBE3qi8HD!84+=Y5a3OCQpP< zR%E(AR;D%W)t1smmPfx-X?qJ3=z%URR1EUBi;9TCpjeL0x|EP7)*xrBO=bRaQv z7;m0KhA3_=hoi$9MOsElH{L|Ffk?4SkhmQ!O}#RJoz}c{E$A2}WW*itt<&)UAY{LmnQIS&(|$ZVqDm_W3kf4jV2?X>r? zqQ`!?eeT47vpLgD!dS zb5pB+q$2umc&(2g{b9UFqi@S?D1?P^M|i6~!KO8s4&w`55pY6%4?3@MTq}YU&0m!~ zyJ-DDbP5Hxhf&H;L1?=1F8$AB;sflA=`if8(WO?bh|*>}m4>f+BQ6(FI_o}W)_wj% ztrpKaD}F6?i11<%nNO=;-O=6$L-6_NfR?b=@jKlnFW0(8pVLFJO~nw;K}8BQZ%+aDBoHfTz8cH{o1J3MMuKsN>HP4BVe@+DeL0SG9FW1{k z4=@z7bT^6dO)L`>-VNNpTJ^iZR*1kG+}I^D==jKk<@yN$NJ?JiA70NaFQNNyMz1M_H z+dG|c9{4bNJ(dPK|COG~apPCU7~p11^<(W|hd-ad<1`HpFmd0XTlA+SvIWVKnBxC# z8Oi$JQI4vSh4_44+UQk7htV-=ufm3v1-tF6hPj)Cw>NL!Ln5wuFRqUJ4op=?Ry6MI zBt>Qojpqy(H`%oRRBt|t_V+D5dx*~>y1(mBUpf(MeMCvR5<*^;|WY-Qqjy)Ff*4rq`m;XRn)((jDPGqfHd`0)Z9Vrk1 zs(9`gU?e1vm0YRDV%=JFiCj$M$(SxYBbb(uM7?63H7~`O$GrDOEyWX!-rf3jTI=E5 zh`6WP+%swKjDXOy84V%5!*|v87gVjlxZy%oS(H!Veu}7fjlRd?2Y&FyF7|eT{bvSg zpBHJkc7w73EzbubXj&i&Xs))OpNnVLy}PRtvjlLVy}-G}j(j{ODyUOtb0hTn^exQO+k+JIyxFo()5DtHF! z6e|9Pf^@DUZ~WHO@SK-pUoCfz@f3*f0TR?X4B+jj7Lp-_UK*SY8w`a2R-73XJ^EcF zZz?Xnw}nqUBU+e0cNKKD|0CD^0zjS;OJj+q$x^!PQF^2?En3*9VPwy$5k3$r~#9n6VrM1O4qwcCDqn{Ud|E=C^vIg7NeqzR!z zM{=V>8Gf`~3PTJ8?G|^izR3(y&K3dOyl=qL6@2RG{e3z=R0~Ksl=AEXvzL2Kp`9pF zaP8hOV_c{tqc^SE=CeepLjWGinH7g1s5}Bb^+CmQPW6=G)8m^E*D>vj1~LPik&YdY z3-Vzvz!9DA`7hBx^YebXqxFAXgM=pFaXt5i(U&X6ZHi%bc))y4V|xlNvAWUu34`mL zUexUNfMUWcu{M+=f6k%!OVDa0A7$sKA5zf*=9~hQ8$bz>YW3TkoXAtA+n#nuJ{?CB zC%xjW&g~Y?Q-eO>Dv0kHmNu5l zqYSv8d(BSqAr>3$uN7*eMUG~|icJfKxJ)+ojv>BI`B8ywJ8zj3{V%T4mG6NQ;TYG= zi7_RcePyEpUJ|7&NtaPr&3J7YkFqlL(XVF^U#?MFnsQ-&^}UI#VvH@#@V(U8kZYt& zn@n2?pKVj^Vbk&KhDP`a!dp}w#|^?Z z&;iz?uE?E99+3p1pD*>qMO5k>7R#bAbn&nD=9(S>@`|QT-VNloUc(wL9%0aO-GY4^ z(^VP0+k88eO$z}9pM_kvq+FU8(0cTOOSoa50r}~r`$-RnHv1CpypbUiALp|~;Psr1 zyjvXF9BaasXGT9hGVLUfMgUCzrH7)Basr1wH(z$)$UR5d=sUip-ycopVFDvR$ulT= zq`jo`e(q<#?A2R6-Q`e9mc$?)vqVuSo`LQFlI z(IVol#B{*6oGtZ<=8UxO2)37J;O56qr!KMcr{^5n-0jG)W`R)q>@grTr?CW>hlgzo zpA4AIU>Vw!!ygWt2L@`?QI9*B?&U#pdcBq1orHIBTaFEP+izx?XtW%l!z20X+Uhp+ zxq1fAFSQ!%nG|?n!>nC8SK%wEv(K@dn<$vWbD%RPbASf66LY~}(h+`;7Zp|8hKw+9 zCkR|*vRFAKA_>)bz4PQ=iI|=*uss-G*(0*)6l(Q>{K7n~DX5}<$M}oA$Mp6#t zl;>O`rAzS~g1`e&wj)g>yXAi17*S4Hd2)o9+BzlB4rX zoul7fJxWtV<$g2Z4Hq4NRK@Y=np!veBgORwKvp|1Z*jcT{Q8Ex0V(ua@>!mII&a^~ z178EGcXzcZU!CwwcTg{AAP}M8Bteb1d&ASbCZ$BJxrwI&%}Wq@Za#I4d|`pre70wWQB*0>KekZXT<29p}h=ez@ zW6xxog4NZlqQuZ$rQ5UCKsf62?YrXIU0RP;0+z%%uEy+g2i>yUG*J$*$Wy2uM@t{< z$hBJo0cbs_60et+aL-b7d{?cFsAI&nKqUbRV|6PBSmWCSOKSbnIZ765yF)R+9d0+ha(l29-QSC3}LFp8u5ryqd$iK>?o46JZWCgF=IM?I%G_&Aj9d=pbp zA0$kt8ZuXkTnMIi`V=*re}566?Bq?;L%Ij{K*X9$XgN3z^)9H3rdGSfiB6mIMb5eb zWUM1a{z>TeNTKF{rtM9)yX-n6-dnRx9fKZLP}DlJ`tfz0@yhJbD61rWE%oaZ?n6jb zP=d?-4qUYldw?#CP``bC1&r-dXa|Yf1HLVTPGa=fg$A0Qw@&}gi&(Au4U(hTtn(<3 zEjU!0RV+uNP=g)3XPW)f3#yeTW(D=jXA1?uFQbp<`v=*)!_zg!o@{&efV0h}XG`uVOjm3191%se2INI`8~MjO zY)qJ3{d0QabrbB6D5bb3>SYpF-8l37)X)eH!}1}o8PV_jwsSiq9>x=a8tC^b1++6K zk#lRLoj#DoK+Lp+Sx@#9B$XANG2Fy zEw2DmX$`kiuYMrn;b02n4ID*P4M%%(2IF>TvM4+c+9}T^l3aP38@ANfqU)-RtFm5LV zc|(bQeyllEUSk1U5Vl@?VzTFQBZ;cfzz*Z$_=*eh1tnStb<#M`wU2!nv@&Rsr4?B;#U;!ByJ&NJTibr%}RJT3nPq!Pp%TJY0w+fDz6 z_jrf;g>wkRd+QjB_Cz#a-5%>3_+9|G6>0u=9Ca2PMx0uGzw*qFMs8;8h8%QS z#_K1DZ&;kGwLe#XHlk2sB@{)JiT>)O?$4P8Pj#Ow2Qmr4;~aE-H@9N?zeQn8a2|+y zRbkUw!YhS>(U%f$bA?{T(Jq_o$E3>`^1iCGLpq#>9AYpI$)>H?o z%p29)U)}!=dc7B4yOs&K^lR!N$-I^-y^T7y_l^$4YG?quFv4A&LR41%v8ta zSJaz^>%8((@})KZ%2ukE=uNt-x^k+2AY!Y$j4h9eh2CsW*Orzt=lXh;7P)r_+4~F& zTQ((YG_ECCD~w_S;`J%8dbnTeuQ7v)jESqQ$BC8h9G#9Eg0&|r%xurmC(S>XEFivj zD-EA;$PQ}0P&+dng{tR5y$0DuDX=b4GubhVMjV1Yor0R??Bx7pfQjnk^oj4u9H`nOR{k-cz+w(a<{&fKzFAPjfaq%hDi7-A zb)hE9+5DHxyArF6?t`Lof7(m*^sg(&-2(E$7NFy^(<3sCyCX`es@NIEgcdWDa(kIw z-QsoF4k=b)K&v8tZk_YOqg_j_g**Su14xTbr%MDbHGbHJ9_NLEB~;JWfOHlDb_DS6 zs#LcrON|me!C~iOutc?_`gL_zib9aW<7URbADZF)#l!3p~=5SG||okEeDM% z`kHZr8_+=L(}KEtw|*o2y^>#O*PJU8=!8Ku1h$8_-3lE?KC_~$n+pohH|Jts)>6$Y zltb2gL+8G%uKrz2YYSKHZC8?sm^i->_3GS#tm({Oki4{)tMf5B%5^)Tpk$e;t+hKl z>nXKCEoYsL3m+Xbk0H=^wb9UNy_A*F@%ak(d2ClZuG?w3Tmpw#Al;5Nrrv$svift0 z@k$%)iHsZEC5ula!%ru;45UO~917;~OSAn*20U4yw#WHOTjx8*yM)cwbCiG5Bfv%-NEaXgF+Ds+$#*o zvg6lt9v$X(flz3vFX&0sr?WmT5l@OaoGB`~n|hD(xVuCdZy>Jdx!;)w);D0=q0$Y# zm(}*8mlw}&H7mU!2{()Irgd__cF9o2tjBT$zc*qhQA$eSQSq$TcCpyol$~#w7fXf} zd$din>Q`_2QamNu)&IpJc2Fu6Lb_%ipmeWmoQ_qkK&2fY9k>jnD?6W|O4ik6ze)_f z%aV!kaS+?+Vfn4;Aqd-8F6!BA$DrzkK`d{cE&{3JL(CU(KI67eWro;`b2yOZI@~@W za5Kt-QD%}k@`j`^$Esog=^uWX=ISX4O$3ko?6=@!PEd47?_WDc0cdrqFGtw01uZmg zI0r-!jXWh9tWpEOp4QlUwYy`Oeuz!Rp(u$HJ6gT>nk?4Syi4}@04B5z1pmEv&>V6% zM@)S}uU;zUT$t*Zv^JPQlh@ZJdMmlEBrX$~p>9U~_LrAQRA0k(^)KJGn|(ZCCEbq# zO`kHk_5;-tdZT_w zL9ASgn*6a1nx^2a>(!DW+mGx9`4B%6&^Jt!FnO|e*;@$(W5ctSq^BydmlDG(5neLE zBy@IwfPa%8qpXNCRp+?uV657H)%BZSX;$(D#(B327#K|URVijx z9QD|=l`~Hh^KICh0}5;CgcbJ6kN84NDDj4A%vxF+&T>7KIf~gLr(kddUyHh*FC4sG7VXB>nx_( z0V*(BZ421H?H_LQ@4^Y1drsI(tDO5In>q_o zdy<<1M{`O27y5Y95L`JOBkX@8_()OfEadzlcIL4gvXV)<6@(I(gMZmC*hjF%whQU=XF^_!k= zTwk3#`s0>BQ}T1MSJPKF*g_6Mz(8RR-}%9dio2rTW$1VO`hCy`ynR6;)?=W`dn15E z2jV%|9!G-H)3qZle-jSl;7&fe4X9#BI8-A(-;%rKvK~WUPFyup?bmS{7Le*s3W4$g zl{Xc+LEnG`$LTDTK2OfcibQ1p{mI7Q56p)foSx#pW79Go0f#>+XcFwCOp!Q&+A3NOYDLSn$cP!z>PY=wAM+tcT-D&qE{*N#MtoFOneVP1Z5BN>!S` za{%@1#(^yGGLp5OD*bX#a1HoMB}d-fvLmZiq6nlEu*963P)lL9CtIV7o)jKxIkh`h zg!@mTq2iUKCxG6)7Ob(bTacGl@uZ}VVbi9vKtB-IC8=Khid;2Nb}>J2y-=zHP%EZ2 zscxEIRUb-<=~TP(8vHu_WMry28ddAKECcZnblcGaEtifBTM_^2VU zHe>8y(z5PynS@Df+vfnpw^%iR__QIU0V7|o<#(Tt@UqUL4wlcID(FH5-c?9d1400I zkxc#xP$)C+h1e;Oww`Zp+SGURnT`zs%as8&FDX&&k2Sb}d>pFhpgakCz6ZXbIRgr! zOrT`fQ-@I2u96wV4tJs$vD&d1RGTXzIZmujd<^$z*q17*{#vKG2nGpB(5CB3bc7Ben zD|g$lq&Nhe18L|*l+J6?bYnF+k6}g#x=D7#N$8*yNRH%QldV?CkvrW=vQ$hgXqFBo zKOlQ)rL71%@|ug`n+*mMMk9NX%Khrn-xvIzL_UA_E8X-5>RLNcLGhs*j6NqOm5HUv z_Aaz0N?Sx>&6$KF;lDu&ar(a=WlCP2Cjqb-vFX}4`kZYwJ5->mag-mRdcBT3&0mc{ z1E+bflzRIWN~pD)YDNpj>DM-lIh0LCKDBU7S8-$V>c?uaKUixz?d!@sRU6TvVao!0 zquYP0ulDEwcQQvj&)2#>j3S6zgfvGM_ z1e>B?{J=!n@u=Fq)pnnYb~W8bJKq{_cKw=}FIxAi0H3T~%K?X%vBd={dc)TZKBHp z9$n^qL%=``9ZM$@qUVc20BOVq?Un#M9^NWkH#z#@rv*@@yvy>cQ>hxD;|C#~chR9aPhfE15a z;=BBNA7Y9Fa<|!3bHfd3c+A5~$8zH+c+&6v<9`ACAQpbQ=6(Hq7_G)VWto?{*2pBM z1Bl15AP6+;veXlCfeFDz(~E|HlP2ECx>+3#dY_KyxCB7v_O{QzC9#37hgd`F+&XF8 zv-uT5ebH%h3L$cy76S_mpZf56b8 z0W?eJyy3nE@VyEk@r<8rBF1+oGwt+nwWrf&0LZeQrvZAlXv+I?F!sVI#->-AQ7goc zncQ7fy7`+Yme`7UqjW`A6yGZ8nwo67RZ^8|`49TF>=0HW3bqv_6DC9IEt5QywV6Wg zp5mCHI*)F(6~(SbOhy{l@8ZDdJN_grep|7tqu)`p7C@C>+Wx7 zCJwXfJsZeXoD?5Y6^L_NPxUg$G%hwIVfmJNTuCgU2sC!h;nK*lf*wViBWpCI?! zn)U3(nQW4#Dx1{kz$FaSOG62X5Y(oTMMZx zZ0d4j9yWh2X|uL7>nY$qKRIeOF2ts~ywigZIEn;S4xoalq7g0jZhPE*KkxCI%(~g} z#zq=7H}@H?y#8eC4%e17tdH(lXGvECr)?OokB59HI0D~3L`1~V+qAPE+?-n&O)0n% zEy>$df?YSC4G(`HunQsH)N=}PyhE8z+&SoB=cWO!B4T(sQ z->1SeN@tGZ#_w;@_@|9|M7T0KwRSX)*k#g4_g=0}Df8aMMen-r9(DTjwZ`qCcTz!3 zeM}dpCb-^|?<4CbWyolE&GRFGa-QdFK0p>zenOz|f&N?3H4zRRNWnw>XM*O`0zVwu zm{eo{8GvFCISCY~m;xO7j=;2y0*EpwLJ*SdD`<|Drqm~|1o^e&nV6s(L5ZLCNJ}`i zD;Sq979K5`dqvcN%sn)uN9vl*a;K%R!mk-(5ExN)Vw3?lzCbTW@ZfZ#14)*k0f z(Am7Qhi$CuALMMr1NL;B*ium_L^cofN>h1F&Et3|;FvtCYMfx^;T7(c|M#Uetd z+Umo!sxInMMKmGjbR`R7hL>o?7n)KbKtQcIP-yhqA_P_3M``zI>WieO6Ty9)7wa^( zGA5MWXzO0oQMkueeF|E~8(s(F(4!WrsXrZ401s#yf}c>o?D=Zxg+B*{voAgmyNiwg zYJ@m7$pmvEu5}zzJb7e0HGg+bfZck!dBo?q@4RyhG+SdM;0@HYBKnI`Yg89=>)aed zM8*(pXKpH^J{oNl--nB`0a-TzvZ^vUyggnjK&d6rhm-Ux~b71WG4=Xcd(%l^@-8J+ugmer& zz|?P#=WyTOx$pJd-6CFqAysgFe@ZxUA~PXJXfPw!zQH1?mFgDJF7`k7*3bK@Gtv-}J-GQCro^ zN~%|0r(JYO^4My79-;UX5aThQv!@@ZOAfqn8&1keRog^>bX7TsP7N`S6&cDZm*xiE zV$8Q4Jb!!Ym^Q$?XYu(ja=f;h5w{O(JjFXt+$`^EL>t*A}(o z`D$O+R@|M1M88kjy-4zW@gg4>UO}(upjY=V!El zF|Y=_maR5BnONEET;19+Hc+IqRzA&q^7;)pz(w77l*0!i@dhN%IiE8N5G_zCsXo>D z^jl$ak~q~RXa1DfIGrJU;(7h)*4W1MH_w}ix0dfj={UuZqTeJG*-itecIU1U(OH~1 za2GB)7Jqz;TuOd@e(Ub+J_@~*o-_uKNaQJzYBNb9oR`*&0)vDVIIZ4l*%u$a9S8Li zYipG6Nn^8bE>h^c-rZMBs0R_T7on+feWQ~AlD=>CbA-?5`WMKSp`$&-g92Z`Q zpY6%`EXeX6fUMaW)i)GrShlVcKMFgY#V$>TQ8-9SoDUo20XS!y0p5DFUTn02{9|zd zwQ~f>(yu~rk6E^3gI@B1LZE=7U3&ARmQ^X^0)l@Q_Nucp)d!9&o_NqXuQ|cvrhr$E z=^~zIJouI@AAh?~L6m!rnUoNfA^|EHEq}n?gxHVEQru%TJFJr-P?infPk&59!}Dwr znSN_p&k5Ao4{tB<-eQ#43Be5+TRaUu7{Jn|7SeKcWM|&T{X<8m85R>1fIu$SB zU59$@^L2?yjY2>TBy>Tjcqzn|iUseU%emCB`l*C|)C)J0IpzSpjwxz>lEe0>CZ13K zEn>x)_2A<*br#aB%J!(ezK6^#tC`zNbP-kQse&c-oR@`bJt!INEMt)4Y z=DYI>Zc2&SdI?%vteT@F{_WEr1=`5Q;B&$G#^sZC%5Phyjupp0Laz*M>)KP%dOpnv zy$_{?K%HRjrQ|IB_KPjPtu)VlYS4@YbB) zh&g<%ggJ7(NGETA%y3Hs=I?6xhVyp0gJ&b#NhZx(Av(|4>KWBULQtf453Rkm{Jh41b9+3`}jXTJMep|K?(Y=dhOLVznRHmT=Oo$0R zJW8?Cg#-(8T}Tk8)%pDBL$v1?|5tEkZ*(CH+=Jp57%-0QB_sM?MN7lprb_TOkQ$-IZ%BUz8~56&I5YxwG}iLulxypoIR* z?{$D6PYDC;y2WITD>es!Ek1jPBxTqoOzy70FyNiSuc#$Ip4$=ETzh~2JRb{XvpS`6 zXwnR+4A;{E)L}A7BK&MQ3Z|5Oi< z;OwjBt~!Jv;oi)3>7*jH+ufp0_|U6rEn>(WVX!vojwqe1bw|Nsrxe=)WP$^%Wa974 zyt``A_esjDICKSMr*H=x{(Tq&r!Pb_zfr8Qr}Y;b_Y?$hEJ8D$T&+o`Q+}*p)zc?$ z`x-cf4ajpd1bs%!`Heg*>e50@A)sJ~*-8e;+JpN|Zw7-Uur4^crjQg+6uO^oTeNa8 z@E`)1s&cW{GxsBB1Z0$;%+G-qA5q^M5X@jNR0z9uQXYEi_2=^E+8Z%L+cZ1Ma*r0y z#-c%)B27*j%Km#RFr8W4jCMUK_50JcKFLH?CCOY+8zB6cwMcsnaTxSOBD^z8!|**N zfDktcP?UnKvKDe3hT&=AP>oPRzIyu;SS^~K0Mvh5Qb-(JY06wc@7H#r*HI(^*N={rg9+>EHa^Ngnf+pVx68 zi4`=*u#1*dPsR#ZRirD_t0%Crk>kjNE+*`k^8&wpdeod8_X_@7Lf#mBFJV2PlCbVo z-dGYjfx1QDi0pv#h&I3T7{m&KtuYdXou|QV%dhNm%#}_qP!@!uDo+fI_RF9LZjfA= zwE1?94>~|;F&G#}Qf8J!@Cxs#CtX(4=co_^sTIhyB?u+FXpo=HOd_a`J$EabQEeQm zav1@t+ct_j*C(&|-l-!=Ag>4J^qg_MYOj_hz?|)Y*zCb3<^DkF$>Nu0-Z3`~J*I@j zZOW}+BKQ=k*iP^Lx=#s*M(TK}x_BTStAhka(YEjPm)^rV&To7>aKBL~Y#s~y;u=134mi#q3_m=gu3D@&3k_IjBeGdK)-LFFOE_Nfyf zEUcG;tH@F zJjq$G?3p>>zW1v4x~?hrI8>xOl-e*m66l)IO*FfY3Up^D@Rr$ND_hQza^ZQFPnqqB zSzITf*iSHY)B(zu)jnLgcgJ%Vl}hX96_V&~g=A(T?1?&LaRV40swicsv>>K?DX|HT zNVYahs!I3A5b0;;ucssm!R*DfvovV0^)HVqQ^|Tt3wfSuN~H{VI^a#ZlMn*%vCMJ( z-Vei-vfI7xzDhn^5`J>iRKA!;D$y&dtUCXxWkfv+aHf$EydQR}a)PMz zyin!m>aabFepq9OL^-Hg+25w&)M}JI%N(7FJn(wyiGKL$T5V3~HG2Eet%$v*D2V1P zg<=6{W6`y2iY;zIIQn_Ft^Y<&z}7u(O6pYtD?>*VMRhn9i7!wW@Mq7-R`Rz+?p(tz zDRpsWaah2;P?of-K}=7NJF(2Nzs%xrBS|K@JHF^eQey5j9A{OvQ%o zjJ=PRq(2k_*!6`^wBLUZ%~;s-!9fw>3f2{B%X6pZ^zThHESI7V7;| zAe1MUWJcnZRg{Q*bT=1-WW_Ub%zK$HU4KL;wg>9`bClB+>a3lxyNisN4uBgP^r{mB~;p3TN$6ej1lmlnVWn-7kd<${$Hb zq<{W;={RSV^-j?wwBw1NsbB2m0;g`WhOC)<+iRJVoN77Ih`k|g>rrrTC+whOT?znb zUHpU6scSN5WyeRVXH`C#cqrS&1V6z`Zcqdi1iBMs0%aY#=p?GxFRLLRw^?n4OA)7|b3&6i+;rX7 zN~eDd%?wKQ1aYU`g+YYer!=$ZtdkjO#`h?cIHn_idbz|A=4BL|`3WZO0{84nK2z{MEjY&y!$wGVwWY4Y~^9@qFoo#s1WBt1S`rFXp5IO+g~C zA~8#cIx#uNrus9_IGK=EI{>wXM+-d6sx%m?cmuY zk_RiKXTp^tKcvM-P;seWi8m7N>dg6^nScOh1=7zHUm^kv-^qAB4IqVyGX*%k8OR39 z$#ZlDBpV$27q6*tENyj*B1%AldK5SjVILdo@tG9d=2wu{vHs>uD%2HBF91scd7rN! z!Aa5mm45Y%xMAi+j|jqyDK{JWFJ3HeSzDjUIU_tC|2$A#Bk9D3U6KLz_#AvYt3Q%s zM5=tIDL@;PfugIORFN`6LwP#pzzr@iy;q$o8`bO}y3ugL^XxsuN*K$rCWiM0hKkp) zF#8@c@k;rq8=%%7GR<{p_lcrN;NvGfCeu<-QigJQ!%7?&oSX4#5_FfKwy(&_Vn3gZ zpi4TY0SbvAL`uNH$V#LZdmq~AAfXEiJ)#LEo6H1)*QG%G=BeDtOh49AMGD1}3+g$^ zrUPkp?H^hF?yTe#qceg2HuX(plNZP&aqZ(fA-|uo>}!UXug#)EG&|qAA6w!El$**q zAn}1Rg$zgC$NhkHd0?bDw*My2m!)l0*%bcZqL^PA>qC|PgwR_cYn1Ngh8=XM2l2@{ z&Q+E>rXoViZYs6PZ8?2Z2M!f_W_TBqos3trA7T^RWi|Bu!_|jl`XOTTVJs>2>4%gY zDy`~aDibnLrZ7Pi=MT*4jl(ukl ztcLk(=8G>xVeUKQ)e{ynOmf!rn6Ku0d+yAK>nyUAX6+Iq-?pT(a+mbq0>5--oSeX^0L-u`W}$lVGGcGK>V^?%s10g zkhwuEn*%c?At^%b?odfAK?1Nciq#>W&?MR7q~=pQT051sO)%IPsvp2;vOi+BOdBy>(!*2$R3J%Ct@UVoi+ zo})m!*hn72eWSKzfb=H_A;~E?g;Ho_=$=4dVyLYOOip$3WMw? z#Q5F?#QiOb8V(Eo}b`%Peqk~MX`7z zv~on6^UbCe+v;We9}|5Sp5vX zB_q19I`DLbX&q&^EI@y_s62gmE;p~JxaW@GGvmv%e-x-1q2uNzukQIZN~9iOYV1G| z$-%d4-!f`V?mbdH$A-!Mdnkb#Ciy#bXU00^RlPIZ)A@Es>YkAKP-hP-9b8C5-3D|# zG2Gj1VMbk(Br2kkI~RJ4N>26p(=Sq81+INkGzXH2uOcs=Yhb@C_XS5x!HO^cou=po zz(ktvms$4sLNn0J#4z@_1{IcaqDQXx#=e)S=Q@ZBnYtD*|BRuI`FK7_2DM##_|`4? zc^pQuoj1hfZ6iTq@j#y{?BXp84gYUU06c&<<`v(?0rZeR<}cgU)ZTyIJ#lc$q*b5i zz*@P?>oN-lW^4X1+sOcG!RQQO#@B0FfV#~)uUQ3F;R_1cDtv2=?f8mOEa~~(mff0^ zV%5Cxz0c7iY3c}+Wn2JvCZl$G(73c*GeYxQm3ei^8q3E);cNN}7u^mMf+VxppUe&83 z9%?sMh(>QZWD8kOu2LM2c%QE67~!A}pnaU0MV}2HI#x{S37jY}l2E;pY;+o06-rDh z{QZJ*X+( zdwJsgKB>nU9kpgFcc*ORG0 zVkqxSdAXTwrJ(3Spp6*knOQidx4C9t>-K}C{!|M|c%oXCfu9ZinHZWs7;qbY1Ibtk zz%6Tbs+h@y+5skRO*35Hp{u_#P^&S62L&&7BDe;2y}=wS4P3VPI|9rU+J)mt6~r^B-_|$ zMYa~oOEP_YX0Pq&6wLcu@vUF7x11jhCXO`W+ZnQY>=#nmHHE|`I&x4Q*LS^HQs(td zn*PQH8Om{bW}{+EFr;V*XvZzz@H6Fx1}{KsIm^Lf-mwt-`8U3*!X=@2@s7Bz%Qew_ zZ-}r8?g(*#zdc(cG=Su+AW`*Rb$e)C@1_yaz9(6)`-MjwM?JzxjvKP@AHgtNm9w95 z()1XE=td0=f8X#J%6#l4nxVlIiniNK$^R^g0r{IZ07u==L=tr4;!WiIX`zDTF&}TK zsgBG6%f%GM=J;yamaQHJhnR1*^WHrlU}27@Tum%w zhj>yH;{pd1$__!YJ!tu%7HE;8x7UDDCFkMLkY*M6w3Yb=6H-= zh#^X<-r~E2@+=9y?U5}2;4VlLqJhYdNsXkxJ!X19t?htF?yX3T;wKpRcwgEwKXNHpfi!c88DfB`s%}!MRn%|Qz=f!9CT@EDjOF7l( z*lnU1%gE8g3aMM9A>vqrXLbh?GhvDnDriv)`rHP#~|O|GhO|&%kYc z=U`*#!@`)=?ac=i&C=e_M5%Rc>dK01^FtfP5j8aKYu+yAW?>39pL7bh1Pk^}@|0F8zUaafdd`*V^*ZT%oYJ0I`+Z_h53Oq~5QMgBL9{>3NB&Zj9!4rNp0 zOq-WxTkr2>n%@l(+bnTej``?{tekaB#@Z>-=xFKoR;AVN(0os}~gb;CJkyrBlpaJGQI#Q)HXKOrL`x6vi#d zWVs6;O&S_S@@`;|5{&`87`DWVhxhKFCeCb5qL`^+F752B0hJ5!V)HTXd(n>bF`v9~ zUQ(c9*^MB-ZcjSiYv|wu_Er^tD%ptvcuyd|+;D<{+iqFyl?`5KZ|my5Yxiq-%enjB zfy`LZ4LIQm>44g(73Kg%WcG!E@qPI00LVuLi|vi9J|CB0jWGz-uqbTO%Pk%92YCig z`dG*0c_*y279+~lv~c~8LY>xq8sfo@CR+-ymbHkf@RFEIUnqTY`!_C_rjXY!XTsi- z^}vVB-Z!xxW5S~is-vx{mT8{Y66H<_#52oz7ulD`eAdsLMz7R;r2Lm!?H>>O+5c3r z+sv>VH_j^F8HjCP7qzAj;JM?yvLFNhoLv7cSR@l>H71x|MP}QsUKa%d2Y2C7cO2o(-=6Q zIGzhjJyz?EaL>@8>)@$%u_)h713NgJKA?dFN9lSAHZQ^@)HF>GK-DrN^|3}0*a8a? zAvWS#5y5{T=HN7oiO~lo#j_t;5-pAqq7=@}J#xf4St&XRuJ>V7WB`VHM}4jr{6YWo$ox>|Z>> z}3}t8xox1Gz+>mn$-ej zlO8GiYj(1waSJB^qtHE(oPt~(^1t)btNt%v-$8q7s~$q{JmCo8NdQ-v$gTZvS}+A= zJfCFvf?c~^A3yaU@#F9I$#rG0y%;66tN#&Ae<%0u1#rNmhN!T_Aa)AF0?`a18v-S2rkNLN9HFzJ8R4jb$^?$KOI6Gi< zx$D{g8PoirlaJf!)97s9BG133+F!no&rQ6>BQ_NLkJQrdY^g*FNV=<3M*82Zkp?*Z z=EofAzufI#i^1|`KvJgmy}SR#8ts&T(^FvK2 z(f#!s|K$_@PkH=_JpZRW{-mP+PkH=VOZ=bm_>=a|@NF;wwTGBWCefn*Mz2dImjK1y zFFo`p=KDph=14)iwqTJpKDqkt=*CTMA(Hkukmn(-XG(#DEJ&UFldS*wX#e$}l8eE{ zx>@IsE>E{o@NZq6T9Su<=hy%99Z6nb91Wl0ctUpcoCy52{Gg-iSFMzcda#4Txbdrh zkSF;exSMyc*C$Z?BJq;(7Io+YwWFWy@PG@tHd{R6?GgF@XZwHkiO(b(xKWYNO!6Zu z#UF3Pwd-I0#RDXCdj>3~5OtrkN7P=%Tl#gAd%t?$`^W&AsB##2{=u!1VZe7a-y#V= z`rxnL=l|ceTP^;$Ax$KY{-A{kFW6D7ui~$snu!1)Zjjp5t^0p0lu-y)raK{<_;K^%q6tn9nlco9w*w!J}6_hbQ)Q_M?-;M+|ZFm%rZP;w-R>4);n()$lSU2rXb{S_{Rb_5+VL`DWpw6G z8vaN*{KWwb;$26v(zSpi8XW^fqe~_?@cFeJ9Vd_i97*-1@JN04(&IH-vz99BFK)>V zA9R>hiEF?2hp=78yJ8m~sa^gB_YMEXlB9qmSMGXLv;OhJo!`L9iAv>)zqq5*;doZ| z;50uHQnxo?A>AiIB){l}Nb=&3Er3(K?}&vD0MX`@`9gk`*g;ppj%=6jDI6{2h>y?E z7>WKek)pscImUFqJz}JJyoQS3W&PFg=nf;EmDBSgj>PLd2t6$X{NkA%^J&JDXk_=Q z^U;Q~fM&}U$t3(mHF8Nw6>La#E}Zu0s@(){D(J=7_NzCWCtf4M^So34klMp!aQfmJ zOa5|y?}|OTk|dQufX_T@IaKox{sW<5Kzq0n$zLnP|1HHCsbB|M%QA6CLi-Xgv;|KM z{C<^>ECK(Oe%bhkhNQt?D{r*aq<>LFVl@Gc_=gi~j&yX@CBUF(Om6)$KQaQEK*`4Q zju<-#zYv+(U8bWC{w}eUG{BZ#(90hEuJ$STcYcoAn_pDg$u#)5tW-qi^&^h714N2Q zF<|^f8lB#W$LpWsa^s`(4*^!>3Yn8ANE7_h!AXvS^KMTo0s-D1djjb-un^;J2Ib!+ z&XGpc1u{}wZWR&u$MfH-10v~C^Z%-__1?g9U>b+PZ+|SL#0*y6wJoFhRU$d4f*q*O zSsd9PCQrda@>;e<^1n!^8cmH@mfFo&(KFSX)rULT2nKp4yA1RxE z%TL#@Y=E{1&FM*=kr-4>t5#RJN$V7`UMnc#9@5a?GnqdaicI2#=baX4-~7nwsyGff zEGvHPNSfsFCedR~g|Z{+{#y!2(hz~sL@Bg;ZEU&PAwug7wAMAY`cp3p^+73opup21 zlax{(t5zWi97E*?Vo-H8PAj~;Ld!Q3K)c!0I#i=@XZkn3QG>7&ue=5Nx>D$TM|rs9 zRc2D`LF+ zh)QC3!(m}X^8C>U|DH;@M4(p*m37Uof>n6U@zGYV0eLa0vkbQta-GMoE`=~0sMc)m zx$|+*6W<8Zy$uskZUU2N%wlQkJhFF*wlTSp23QBTuR`7m97&uT`F8x;N5)^Q77#3D z^`y=t75#7bt`ts|2<|p%%;a_qRbpsOvRX zx<4OheT4|qCGf3;%3>6qUAHyH`^6g|6Vy6y4xANazW|@sRAPZ^c~p9Mn}0m47g(7_ z)z>=W5*q5)>1B@0*w7y>yeg>Cypb(}xswIjbK_C&OOS&ZIPgYDt9=GG68rd}FITZCt1 zj8Ug_I(;$6c@OUw-?bz1mA^dLr~aJT{z~gWjm4gkoNRyic;mw(&1Fpk)Z@6h#=*~? z_|KXoIiI8kHHq3>GEQo_MnUSglopeffAf1grdb=&`0$%}(B;=`@7U9$YdEMqa4oG! zZ|YK)mU8MWoNO`Z<{?|_h5)Lv=jl=E*C!1hQ=x=j3;X9+{pSb&L+>YF@nQBt^Su?v z=~>0OF2v@VrA(-X`<>Jh4(dkk*w?!N?2AR8^-f=PglOH`!G0MsV~?#4N^O~>Tk1KU zu3M`}fXgywXE`E)GPn@T{mnuj|M9`U)tQ%+J~S+Rd)NpNH}tbXqBo4<44eJS)^a)P z_qVcvqWZwMtD@XYI2$sYtGBh**-~EoSa4w@H_d3FBx`A0cz3yzY+s%6Vdl|c$4Ub( z7*L4_JQ9w7dlo)LM3bHf%>GVskA7@s`nxvPn2gmmw{3rBj~&~ZU7#2YHVFCVD8rny zGdx7MH`gqlb_siAXO0TznjJbR)QZ@HLuh%z@dwR)(#RI&eZ0YZN_jA0;OZuTN;aVo z>D~w&5)P_e-;wcsA$+ah`u;MX%f?i+MNymnW>ZuvmYZodSlu;W479_zZ&7%VCbe>a zM`vs{)7LMGP&>&_ftGOrF-Gxqi_J7T4yHL(V`fsrh3}8~j1hYvVa~QaFlU;HFAVnG z7nK!+4ZqA$tFUg&(LfsSlZvT~N(<_`A6_(i7h@Eg+3arG{axpwfN^b`ppO>uYB5sR z78H(B%XyWJ8i7vvCOP^ZUplpZ$grovbI`ul7Uzki;zHip?xqh@5HbBS=lS9bc>pgR zC@^{Y<&#zIZkcUoVGGqWtK&X(T)o#@qCwpeTODS8+)BME-)lE}g3lHd7p(W&`{`Y* zK-76R4X4y~SGOC4DN+OctRjH#kY55IFa{boYnW5I!MeQj!=ADq)J%3I!mFuAYs>TT zmT9!NZQ|#-A5qzh+kIE(+i6nQ%PDO3*EEX#sLj6pw^$=t2%xh-8)IA0ptVs|9V13F zrB3YS)|<%W0*Y=q3cJe2n;%ffKO33{g#(rr6<-dehA~s$UJ&5?NgO?=LETX7Zkd2) zA7LIE1ubl*GpE*Rxko@~#8h!b$T!5YpkMgB*@$#O zZ~kcaywNj8(_aI4{C0;>_kWO|V7rF`KOX4Ir}cta1=|@vHk$t-e~fXgIKGW|mRb{N zgsPXtb<8F!Gc9=3D1o~SW`&CO*vbpJ@jkezjT0Uo{B6m_;)-OlHSukpo!mp7@{)D= zC{9DMAL83vP58EM<0%*cLRvWGVJ`(5V!EkMS82q8VJ4Tcm_hr#d`Nw?{hnrZbUSa{ z=HEL4%@eq%ybow}ZM^mh4qwq8PS~q%G67_q{5PA4O>pHNSE1kaQ z_7Ty|(JBWt)Ccd?V|VlQ!{mhmYWK$2(xUbJg9Bu}sHc=eTS*8H<6q9+OUm9VB3Yeu z(3Df-xUvDpkhRPzic{s+9J-xNe2$LRAJWuIrHTsKY-Ut3;0(a4l;m`xL@y^3o-+YF z0+7I4T8ay4e0#X<9?1Qi1)L6v*X^3oaSKiWyrVl5?7qy7{$@9V6?O79m=H)HFyt5 zgQ%S=!^S##s!&}C0>h+?wrN5S#fd&I54Xy zZNx2`8?@@J%cw-qnde;uqcL>P(hXKRSDA@X9sn`X+uxWb>bME?Ccqwff0^qlNTxQV z+#fzG$Q$CR1K!-T{y3gMFj%eXipZzxg96VU5`3-vCg>it(Dh*1T@Oe~TXkn=BE`P& z%9!;?!3!e(8#Yr7v^Snhewlki4Z`%-^u_VFrNC>+6v8=`Z&_*!ZUFg{!Dzap>LV@O zJjlP1pPEObZLwK_eH+()9!oJbaAhIlm=E>wmN(RX^Pag)nES}II3%h!Oqf~N&H!Nb z9&h#)D3TbZfEq^I!562RuTdy!*f5^?!A1-CXjOT>+H+D!-2suA=rFQe*uy+R*2lXv zG=k@kdpr3qQ7p>_0+bsC-X|5ltpH}XJ_@o~7G$(rd{GFHvyNjrrA+=4hdtiSW9GO# zC{R^hR>k0rPm&%_cu+8;h2y2jFbt>7(0Y+= z*3(72etcYIHjw|)NdwD6H?u6Y=ZaVNy#Ri2b2Gi3aJJk!Q7M*a);a*Ztr}@2Isj6 z>Z0f6%QdX40BNnju!Iw?<>oP!dt)o#_r|w`;pW`0X13PS*%qLm0y94}mJU-RmR#Cc zqT1<8M#HH09EtG9-nNAM@9pzT~6`UtceJf^z$In=ylGJqpn0n-u?WuGAcV~mO zEh5CLbF_xZJgEz!C~K(CIlB?df1^%O`*I8nWPVTsrmPWlh+$o3TVy!%pZ$M^zz;Dy z3B)YjUH@tw?UNe;{5^NcQBg}7_FA^8w&%oyF!x| zu(|W&R%B;*N3i7`pxYGVIHE}1Dxt9WiB0#N-QR|GYyV)7MZbm;Q2N4`*de{{wzHW& z16LFab1XQJZGb$C@X_3WzdF-NAHXHxeXD9XhwpH)ez`)XOI)3^Af3%aTj}WqEKw9% zOxJTQC{lAxcc9fF&a%i$PGW6vZGL$6ehMnlxsS>gfR&x%^s?C5LeAj|)H>sc2!`y< z9N;osldee2h<*LHEvv1#RGN^r@;qEdKXj{0JAa$lY3!Q+2829J~bPT-^iX%jIO zN%;nd^336IFgcI+yztIOH0TQ7k@pJp-@V0i8&@-7@+vbORyGhMG|A9`b9z%&oQ18U zzH6)6V<1Gadd6^-^+Ol&jtq#1bSdY8Njz2)F5k`(@uPQza4YiJQ!>;SE-4jCa?`D= z#1qr2TvN(^{?h;E3&Y=Ss^@qsMfn`{!lBu9nb(qzM^*}TCNQoqpBLG985!aVQBIe` z+wqfz-26oQC68QKB$K7Ur7ZQy6#|p6n5;72i%P((}HTI1`&x40!Ca(UXAkY zg7}v5+$HIC2SLc0HD`Db7`~JFecdS9DmL0ac+@{HO8QXr)|o^1l{M$Byz+5{@zRqx zSQwGxGl$WL+!f1es8Qj_l`~~tdp|%2bPtnteN1_4(Pr_k>r%js2+=-+Tj6VdCp;f5 z2=Mwz8Scap&*)N+ZQ~ zS}A5h^9;XHqZsz{Vm3WRxBE-`>rOFV#Ft}$$SSWI#PCf8vd&lQ^)t3un@6j)Ex{k8 zkLT>-6?-_YEj=kH3FM%C$zHV=6U&g9&dPI2jmz%`C=13 z5|wU8gcVfOX){HT_u8Z%EGyrT+=j+5;Dck5YeYXZDT`xX{@YIir&ZLGp9J%jo<+;* zfgy{MIUD0&8R?n48b1_*zWg*zR8z{~z`^r;3PkT98;1EdpZ`rOVhV>vp!QoFg_;?i zVf2|4J~C-K&J(xhBQvpBymPw!P@BjS)N5S++)u_;A9 z&!MGz-09ND+>+H(j9wnVDAr2va=T(8X!uF1E`dZP^&*J*5VBwVq0azKi%$#KO~Iw< zv3y|IV(h1Ia9QZ*6wJs-4QDz`gZ6M?yYG9Hoq`Fz3ek~1~iUR5R_Sd2015XdLbiEGKE3kjBy`{527r6 zrl4vZ2NvmUw0;O@#U1Vo|LUy5r$BS=kk{u$({z*`u%Jf0;<)ubyqQOow1G_~1nnTB zeyGo=wJK%mYqxuzZFZHzn~B+ynDXm4jaG`vtXUIHzK(b&iP@#xE=@p){qPKeC38;< zSk+<@E2csr(mwKc6}7GFUT~E*UeO__Kw^Do&}Z`BA+VwZ&t+E1JGfz~B{G&OxebY0 zs7c2j%;v;4Zxg|GSAu9r2%j|WS)YQ)ZjQ?;T(N0HKZJ@V(cWxw#;OX+Q)z$j=?w3M zYDA5^Rl=ZO!_^Q8GQ~Rw7M-F81aIpP%~U$0gSfPEGqviV?TRf9AfHOP8S_UVueXDUPH+R!!CN0_nwEH_uFL8Q zO>EhSUG{Cv4nGOEmH)vX^2lCiaZ{7Zhqr$JN;89b4zT?AvO;yO6&_4Mwg>YX>gO{# zh1YZlf+lR(!~$u>(c7zc8{bd9ne6I6eR7dCxvQFMims%?;np?D&FmE}L67erQRc%iP8atW_^`Yu-4Fhsp56o1rADnW+e=C|#=Z2`6>)y#ZH`J}K%} zX*eU(eTWOYkOYzDdI^j=ccsKLj3D!=q-reiQ-&T5pD=Z3ifm{X@ZMGRqNlemuyWIe zX7+hjQ|voWy=ZCX%&#M}@8Z*Ds6bfdT3NmxPD?cNzrEaxDY|7;PiR(_r;;iZv_4)I z{jIo<4FPJN_M!P+RI_IpE}STazc|ry@jZq~7T4@&TP)d@onOn2%wKbw4HmubG;X@G zUys1@)^$s#E42J(U5DWTS(S*D(_jp&uOXv4+PY+UcNn9SQ##LK8Me5EGCOb*KEZMe zSYZUMdPlm#n!;qTp&qz0*UQG8R$fi8FS24hp zWSaEGXs|d?QEbjSSMH_}nF%UQ{v|JEKtD3sDO@^Ce+4)8XUThsW z?GJ8ga`0{7tg;%#y3UW7q{v^1s9xI{HBM>IjgOg6XLri&KzHcx z%k!1SNkQQ9VKq+J(rSB@vUGR!HR%L1zAGY_S%a!acX{r-INRYyCnIK+s;_Za9S6*X zS)mRd8qS;oy{L!uYcdxHoELq#ysg0`>6+bn`q7{-J^JnJ>77uitT3n=q;{Y%=RIh1 zrbCRD-SrqXjB4%$v!pRr_>Lu-Aq!zmpTp#1cb|zXS`mw zrOyl55sC~h=H*YY@*=#5xehhWpuoeTc`n}w*(M-cxRgj6MSX> zKDaxq6NT}t`GBH-d=PhIr4-+Pt653mCD&fWOoy?2$0x zand4tPmz0ss3oT6(y7n6`=BaOMkt0erk@X+ zgsVwiWNial#kieLZ(`K67IZ(lW5r#7iPjGWAuV^^bjz`BS|L>2zNORT;%zFFRhRI> zGd_E#JWJ8klk3itt`EC0qYH^$82R(`dr$JF2aJ=v$@C46Bj)6iybd2v0H>vLO`^Tq zv2vx8RN`Ha1T)jDG3on$Bo9(Z04h+qlJ4Lcwrb9oTJy|#t#otCTQ``rs2&zs?*o1= zeA0N>ZpqCVjAQQ7(dRB3(c?3juoX3&o%UsJw;Xo5dl+n0yc=n0T=xeeY{$RO~?l2%+*(-oUpJ^-^b*|4=PGPpjZ71OxBSzuhz+{zJQCxaG3WUb_ zQH(cTozC4b zH%%Kc`4*&~SBV?Gov$P9@39zU$nkVy;**w+cL~f|Jx|JgW+d9n9n2*Q`q1rTUAwEc zhv<3)&vk&9#I7O_9R}o?&GU;D))~giJW9{DyMpdRGwZ7&%g|MZK06$Tj&UH}uH&A& zTPyD{&8YSAXc7Euc7B;#C!g^_koU4{9`7FGqexDpmH?ko+mvkOLyTvapt|uw|FGAA zPDFz2z;4gWn>SXrLL}dG54zi$1i`leVx{f(~YnZ~Z|6NP8 z!IO2Bm4^DAgcy^r#CE_Ro?99-w{C^4bd~2A>WZE4SazK-WrutmcEe6)?l3u;1x9uY z-S-ubs@|iI)e$|9LvIhc%WiiIK`g44<_(D$Q@1S-VLPDX_FNvWzmf$u`?x-?e>($? z^IDtWtLt~CfAcI`SVHF%Zgx4l_~eKD?}@~p;VesZS7BF8D&hPni{cjMA&5jXy*0YX z88(1)r+#Mh(aDwDsSc5e3aQ<#=%re5AQi!gr5TI$7~ph0=OQK!+(N|m0Ko4gRX@pO34G0XcV&`;czgjQF*Yw?Dnm= zX1#0yn;Vy3-i^?MMtF@MR&rYRJ3eYju1|0t5utx#lBm!Ib6SAeHo^131nbZBY9x4P zx_5)1ltj)Q_nK56{yMlj$Rje5oyoOT93%=4#$#Z%!=9U+_C3Z|Tk9gWV_zJa>aPnM zgHrn*iC759yzoZBtet84o@5K7tK?8wny2=s^{@Ddh+18bIPxBYqX+f_TB}|B8vT>? zf)mL0^{De!G0=5KjXl&#L5hOEV)342Q`(8WQSR)JQUBbhn?=&dHH9fip(SreUX)eE zQd#^kLJh)>uZg4@k0`#If-2*_zx9ZxG?7~C`Q(Uw`C4{SoEgYr^Sgo^cGRgRuHP@{ zWLLsO@69=`8w&&bT;|Wl4tY_1p>DSy4@`ZTT_DgusrbIu2-i=Vw3A{C@=2zN_tb>b zgXs3lmpM4+=-8<_tg5EHrlq1NwVp*CM2O#ra|k7#4X`LFFjGX-A@BC}Y4k7pu@}sA zi&}+L7aw~m;3iwCZ1!99tFb+h9MkX&5|pu0>$$mJGH~7&>$>LaY~3~mE>Sw`ngiLC zp-9)cnzU2q>bkB{pBn~1o-He0-fpE+yoI5#jWw?MB)x@32@eU2Mh;g!W{t%5TaeJg zE%|c>Sf_Pi+aXQk2WEsCW-@mTy~pf(Mhv5HyId+}aa!EoAlEXJpPm$n;=zJMmy~lD zf%`B77g9LB?hTTQ2Xp)JWsp6g1M9ui#z{96EZXFg-r+1mZ(N<{A4T6Y}Gc0$a6dv;8+a z(5wo$l^7VwtJWwdNP;?|p`P-kbKe`9@5}C>ZLVQqNW$*f=vTN~-NB{o$3FKjWo2WT z;w-CdfoXmJ)$~iW1t`2r#} z>KQ{6#LJY&B`w~vUt~$68s;S0_?F%>Uhq7V(z=nVHUeZ-dJ^FM2j%fA;SLNMJfdp& zWN_uNxt+?9a5~$ZqAmYQ$?bb9YsEcYwyht1skGvqv60#qkwnFiL}$%dVJm7mkl`Y2 zD%ZSUFGa0c04BZa+!(j`e{8*FRFr|*1xj~_bfYNJA>Akf(%sz+(#-%$hz#8+(%l^c zA{|3_O2-T!-S_33@7(+6vX=jFEe2-x`|Nn0UDr#fEH-6(X0}!_UGfLGBayYlkd-qg zdUYhQalKjBHJ~h1kYLq*yO@y`GQC)N{fF==THmQt5I*qe1U%UG4SuRFZTGIm@IPMb zZe}-ZMzAUan%9RK&0)RdN)D%%?VV;G;rJ^z%RMcBdus! z6>@PSxmSVh*A7=55jhwP3f9Hn^W2{D%}g;B-3!j0v}?4eaXPfliamZys2wBhV{h>7 zVdc2GWwmT>oBPQYs?ueuSsbH0k8U<=YJ+Zml+dND0{f2n^iEIJB!sG2w(rjAm`-}71%2!jz zHKLc->Z~~{RiD*)k)I|5Vy3@bT?#u5uk`z}U`v!+q+6xinhjSpK0B~^7U40~cL_L<7zD*KB zyqH^L9tP;~cZH&5=csxMfpZj8!mxHXPp1`bXY`m7`hG%X0Ws3doDkbc#gd-2-BJRYJY=UmJEz!BiaM^;-HY@W%g(@~9nBk>B>xR$$eeCB^x=pz~cDcba@pTFtk zUjaGj(~5c+6#o%Iy{GoP&P5eoTXd)!-HbZ&QqL_hg6gP?QEoq)YD3BQjk?}0Jgfk1 z-2!uI`md%M&(y2`IS1A`z!!NuMv@=3n6o0Yo)%ZJpUbuWCW=1^vJV926iL9<)LX5y z;gWy@aTRhP2P>M~-Z$!DD#}S(Vnvmws$a`aVwiAxAd<)lc?4|whuIrpM~EgXpgULO z=&vrj9V5F;SZX)=_DupAZEL?&~l|L_FzEeHM!q%#XZJp$mhG*nKipV7WJ$F4tX_o z-~mHn^m_kLc0!i-$Sbbb_Q>9A$oT!p_+rUm-%Cf<<}Q&M7zyRB&?MW=iPS7+&jP4T zAlv(3!9Y)*t;Hr^6={mm-Vg4j<9`S95`0RCDLeA2+!j zDrA2GT+t6)|F=P5V-Q@`NkRM+c#u}!ZO``}NM|kKelU`)oO-dhUw9I722Hpy;Pa~F z-;!%|-tnO1I^p0IQ4&A+A^N9%JEv)z2IV|IpavcDh9+{Fn~}XGe?osuVDsF-e376B zgc%5n*0!_po0J8y3r$Lk4(pWXs%iuNWl+CWhSN*iZyA+J`>!6>9z6pGS5t%wjmuft zfdv zwopaBs#MXpTJmkOB7}&Bxm&}DpPPxm)xexo-oE*QDJM0Kx_--TgrD0X$LY*)nqh$ znwKfYE|yO9wUK=FuJ3|1YE@NLd>2_R96P8r7!#!tR_RMk&`S<<9qO-{K!OeXh0_30q^ zQNt$7ZcKRx;AaX{9$OnyRd>!nB0mam$iJ?0ytv|DL5l^63Ud>o+)l$7XD1AE;@NssvMuGDnCZEy!*@!CTrisThhE2hEJ<2|EOqMXl$UEI{pE43^VWxc^;0u zU(F}@1IWWIxWsUdwHD# zM||9*)$X5=p(d!Z$g6Vq(lZH0-CRC;ROpY3UMkdwx&_o6OAM(O1cPiXj=+5P=J`rw ztwIHH;gbR3K!l~}*92r(u!;9jw7gP}Z}{P7c5~G{;8ax3IxfKgfwXDKsqK%T_0wbo z1Qs}TM`UoWF*{x}E&AJT&Dtg-CR+qvKPuz9mH_b@YLOAO8E4*~#q&J2o!7cWU1VW4C-2FsDwgC&bR2{8@SR zct5quZ1*m?3t|O%nr|Et^)X=V7uvpv{fZw6$o`!+GMZ%-ozkAl)oz^+nVNSo4ZjoV4t|fCtX4JpBW8^)ZcZ zb=S}6vfKZxmf$k0{OGEGmerLWhdHts|D(1a&*>DX@2h`V%()b-_o#2twaR`~m|=CW z>5B}E?vp;7vyh`xOM0s1Cm;S9jt>?Mi>h3mWX(n9l>-?KjX9l5Vac~1J zXNo894(5H?vy<^3n=?2ad-m34;FB#;R`0a zPN8_oQFk7XDm$ro3HbA~oAjbYezD_I!64AnT~f_lHi%ikSN_BDOYEIA>(%Bf%JGS^dyLg65?;bjyc(Ktw;~Llr{$2B!TO)gR_?$ld zR!akl2_81rCGi}a79a0m8QAq~MZ14JDU+|OVV+CV~030-5?cK_4@5MLoL(b!4b{4n8?8u^34 zd;Vco;sR;v&pyZV3wp!GGFG}K06LdK`rxf`OmkhT8)+mRk8-I$rJj7iZAL!K=MT7U# zt+E>CnC)|EcITnvZc{)`2-##n?Z>G)s2HK`n{Cp%xb-r@g6NMl zfm^2`YY$eq_wspc&RMAH8hHs-TOGf#SfpExV*{ay+(|x3-FTuO>k*`%FJz8*QuUxW2((SnI-x}~PBP)^Y@>S-r+&y!z;sRqVuP_;kXQp|mB*76$ zGkgyMmHS1KT6gSs?qaBi7pM9|)n4K`~js&8MX+uc-hmOl05Yn5-Z=UQa83vuUg2g+F@FP^HMn&8w% z?xzLB+a=5GUX~q)PWRRZpiQng^Lz?ounF@aPk?R`G2>VOk(Zn^4TU+LhtRys?DX4e;>;PHAM3t`3 z$Xm7{hMpz!zCXaO$HI?IXE}HSLatBwd!0f~>SMbA-f1j(X^;S?%GmFAq%ShO|6*>| zCqy$B3AA_sfR%!G{4S^5y)8TWlh-Q!*~4`L8Q_YzNb?D;0IMDgwZ-~X;DaT#VmQj< z3gC&kjNPO(zM0wgP~l5AJ3x2A90JB8vAA<0HsbadHk$hi&q+7hXvX#Kg^pep9_Hg-}w>_{QqH8gBc{-J8I7n@O=sg%s074M>0=N z8hAI-kQ#Y^==|$$Z$uHy2rgF{(n^pt)8PaY3e*7UHea(Nhe75Bq$d)RRfoi)2=0TEKVgh%%0OzI~ zvoss7QjAZp48E?ZVJ6?xSmMK+APn~%6iX=-A8Iw$*9tS7k|}R0+Q3uV z2DaO*&Gq&jGAXPMw7R*o!5|>t?aJCQ{g=yiYoIi;Q1yd)UKG%v1+i!?p!k{}$Brjr z@)WSp($V(;RE{9;mjp{kU6wW8=(M7b<(pb#Qz9w5GQBzfe~z{l?! zkC3fb5kM~)C_T=UR}>3(mQq^94&l5u%o4Y43e-C8?^0{&{{VJo9Qeh<=ls>n;WXdB z{?izcO*z!TisrvV3yi-EK@o!c`3b!sBOf;Y-wrih7p@03Gc#JykgY1F7CUEFb@^Ps zgIjtSWV*pdnTm3%*!Kr}tqFT|eQ$ADRU5q3?~?KciptMHe0>E3{Q8gTMhzxxq*1+Q zO+Os8GkBOJMcY#s`DP#f2tZfs9HKt0(z?2vY&ZwBsAS5E<~;R&Xu+7{s4sq*x!~}_ zGSSsn-}O#2fR7JV467Z^0Jkl{Bx%t(`(BC^s6uP?N43MfqfLo(r*gb-Zub#MdMYoy zf50p9k^{KI#F5v4v>$vdQOMz0g>S)AZ%t5YP4>TR*)`8}>DyO&Pwbch=PhqM7-|Uv z6FcfyYRB2wA-Mlu%rQSPswQuBGw+cGa8Iu-ZPpo|eOrB^!O&+Zk zqEdhgPZpOt7U?B%!ScqrXQf;JBl+s*Bwv*zq!-lQJ#vUV`45+ub`;`qsrRRDEA)kp^J9ZnJy4PS9-V?%u) zzDLt}jux!GQh{~VTh}V_0LNlel**gdtfsCNJq=@>^_=q@UF&{;y**DYwfje#R@3y4 zOXZ=1DGK=?UXP81U`)A>ceeFsx{aiJb;wz30ix|+%cJ!{z(FD}c|{HAj6SA20ADCF9;Eg(wlw#sadx+z+U zgn6a7JwAYMs1+C^y=K#_E$H))v|?=lhxU6N^hUpX`$A9U=)=d(@YfeOkw6*9G2pEi z#Q@pHW=5ITIB~$@vFgZC&N&wVhu)z{rU^doNiNPA(-wMS z_L@KOF8x_vO|rS3&gwD68P@bjNy3UiLbnCos>F2sc_Y-e?p#z6Y>K70f_bkG*ji?L z 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�xp3n1D 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

    sF&&KCHpGTT~ZG*gTL?mJ>?(g`- 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

    k=Y@$H^93Qkk-XNXPzjup=-zw3y>_)4ev{s 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̙ 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�TG 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 dwRnuibW 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 DU0)Db literal 0 HcmV?d00001 diff --git a/docs/modules/ROOT/images/rolesmenu.png b/docs/modules/ROOT/images/rolesmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..4f948ba22c4744045f41815e0abf99f34f7d5037 GIT binary patch literal 39426 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%0ACy6dS& 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 This approach should be used together with restricted privileges on labels, assigned to certain roles. See link:../extensions/access-control-management[Access Control Management] for details. + +image::dashboardaccesscontrol.png[Dashboard Access Control] + == Dashboard Settings Settings for the entire dashboard can be accessed by clicking the diff --git a/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc new file mode 100644 index 000000000..941b4dbda --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc @@ -0,0 +1,26 @@ += Access Control Management + +This extension lets you manage access control for roles and users, letting you assign users to roles as well as controlling which node labels can be read by a user. + +This extension is only visible to users with the role of "Administrator" or "Super User". Enabling this extension will allow the admin user to manage the labels of the roles in the database and then attach them to the users. + + +== Using the Extension == +If you have logged in to Neodash as an admin user, you will be able to enable the extension in the "Extensions" menu. Clicking on this extension will give the user a new button next to the settings button in the dashboard header. If the user click on this button, a menu will appear with all the roles in the database. + +image::rolesmenu.png[Role menu] + +The user can then click on any role and a window will appear with the role's context: + +* User list - This is a list of users from your database. You can select multiple users from the list and the role will be added to all the selected users. + +* Allow list - This is a list of labels that the role will be granted to read. You can select multiple labels from the list or if you want every label to be granted, you can select "*" from the list. (Requires a database to be selected) + +* Deny list - This is a list of labels that the role will be denied to read. You can select multiple labels from the list or if you want every label to be denied, you can select "*" from the list. (Requires a database to be selected) + + +Finally when the admin user clicks on the "Save" button, the role will be updated in the database and the labels will be granted or denied to the users that were selected for the specific role and database. + +image::rolelabelmodal.png[Role modal] + +> Universal (Cross-database) `GRANT` and `DENY` privileges are not supported by this extension. Privileges must be added on a database-specific level. See the Neo4j https://neo4j.com/docs/operations-manual/current/authentication-authorization/privileges-reads/[documentation on read privileges] for more information. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc index dc893b08b..f267315ff 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc @@ -19,6 +19,7 @@ The currently available extensions in NeoDash are: - link:report-actions[Report Actions] - link:natural-language-queries[Text2Cypher - Natural Language Queries] - link:forms[Forms] +- link:access-control-management[Access Control Management] == Types of Extensions diff --git a/public/accesscontrol2.jpg b/public/accesscontrol2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be948e1b2b566c5948b15b10d2acebd0a0f2b8d6 GIT binary patch literal 342956 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

    H>P?5-US z{SVOE`PLHv|KY3cK~jRz zufm+%H&GEcI2tSveHl~<8xSRdWKN?l8%X-Zw?UkQEh5tYD$s*d{lz>an<$E`Oa%;A zXm2Fzbn|z&%xEi%U@Hb-rk7c7T^RU_fqc5i$1mz6GBCPVXhNyrT#w*qT z3@*}d{#MiD#e3rsU&zBU8n<`vC%zVO?b^Kv*FRFOSoSa#pFDkV{07Ll}wrrN7<1zQUeUzl=By1ok>^E1(Tw00om z5j_x`De8ZN`Zh{r;FUAMGPrP_MHX9R50gx9*m@4Q*6s!5a6dY{99O4U`}yW_v;cr> z;E*L0lBsIC(Ib!Wdwb+Tc!FWgm|)uSZ0UIPE%Q@~8>dCiaw+~umvdAVaw#XBrI7{) z$W85D3|nL zc&+;IHT=t#lt`87gXwqt-$0`4?8;l6a;U4Ln4uXtG9xqLJZsJ$-R74@b@^Qljwh9&FCga1z5F~9s>J4VF(ss7L&VEatFB2i# zO2Ij(pQSRV%2z$76mEiC-T>ol^F2`0=*QqQ&eZ=X zz7}P6N#;U`Mx$$*~ue;1e*mUdWWEU;MsIC{biwYS1SYKn9nNoSNVSw@edmb*LC8*qKG-Nl}0);K?)JcF-G4y9|zo;A~;s*5{K8Jj34n z(Yx<|SjDQ*|Izdmh%ODh zW9<<|{*GJ%B%G087K}_Z5(Jnx7`V_k7}EJ?ZF6`ZH&ctmE7kCSD^O+-r2&YAwL!zN`~OjoTi0yPL`78Ol{CvBAAP zZ1!}KA@ry4fTC}(Y<}NHi_pt!x=Vp(DJ%^M9rn{q($tZ)>?K;p(O|v9h2oP^`FCFW zv0jE;&~G~jMz_!X6ey(4qD#z_B;s_IuB1@SM|KCs!NQR^55arnmZ(*7$UD?Jtp3Jg zgVL@9E}zUOmJG%j+J8s>wWKDSPKJ;Ll;miLKLWvjSV!-UmW(4ep)=Gi|TC>V#s|0@lrxa*sQ&Li~3uG7N_F{p+@)Y8kQG&#SsMYBOu1zOR_t%szOo;rT#l%($b|DrK@ynBnz)kf|qywdt*Ee_eWNqxSE1 zdtM)ONm@?XZkmXsP8p6#z`U71DbeM4A|bvTJr*nS_LmFOxwA3WGVhtlfTQ{soy!2= zy_SMuB0Cq^KltCjy%wzB2OD?)h}r8s5ZlBcg~2$T+17lL3*M@r)0=4b9|fuhHYW2C zli>YtP8wpl@y$o|PLSvfnP)sxT>9A_xjAuX=E-mF&jPM%CnC-E!x-H;i1sT@Vc`>TkUMkv6Y&bBXbG~!U7P_-#8;o1wlH?fi&J)FI)EXi zHYMa1%m(od@9~YF=wFoT`UxS{LxBva{k;-Gc{f%AkXRAag9(k zFC;AXgs_L#SOn;pkR%cv_$paw2c1jO$F-Nw6X3RSm7WO?9vwWPQv5z}xW?S7FoPI` z;B4Gy*iI#JBqVUWBC!JGmFwB()W=2))#!YS;AXDxHz|0!C5`G@t$o&jjPispp_MB9 zeZm7QGtI(efK1|nEaf0sgQS*V;hgqkm8gb`&2lu8iihDs})*C8o89W zSb_Zmx%OBANZosJxM@80SoEG2>z&ULYuu`O*`$>1Mpr;wAW9M(moFfJiBv)Kq>u!q(y_VoewuHj%Fgpvrwq#Gq~=zEhI2(N~^*4wA`b3~o}y--um7ti(*2J+hhW3NLE zr^{pw$sk>PO}l$EtV*;)O128ZvK7cvKRdPQWtr%Fj}2lCJ-o!zx3g>`M8+{z`Od;k zV=@k}=c+dor#A5lmjdL$H2!fZ2;A^Cfqq46N;c?8nf`lcE53j@cRvnwoEB1Hu_`_M z1Q~{9BWdFfY-36e-ny4MT)%wEGQj`2Zr22w8(A5cCh{skXg?@@l}D$l!egP?6VIEG zlVsO|Ho!ZSw#!fVIs#RyKTUd)=DWb>k3y3{#j!4|vnuXaw$G~nqu^*{3eKz3-6Lt* z3*0-QQb*>?>@E{w+vuej`ac(mP5m_yo$}V&U%MuAk-v~67MW95JZevt2z5396#-t% z1P9FkKMz#G(5E8FfRj7Z=zX}>D274NH1_P_k<@a95x4c>gJXr(&qW-16H_N!#_^aR z7tZ;lCwK)+;^`0gdk^>Ef)14~$wF5C8GjmZIFbs62nt8~7Z<}SeE82>V zN$&|ZyxQmk9ixOi?}#eB)&-invQ!icA;G4K^DVuqUR&h+kr*(pkB@AJg)LU{)~qP| zz@l#_O{UC;Qr9A7&OX87YQK7VSmWZGM&vq1yiig@-ylnqTL^V$Uhzq917WoR(DNaM z4ej{Z^{-WYsFmmwAP5UsN&SSOj75Ut3gx!2Q2gYxScO;JzAxIGG_tB7%a!DtNp5EeP7SR675N78^z! ztlCy)h4`~h$E$PcP+@s7+m_w|&kX|dVj~5CUuNDu?qn2WjU9c4x}sCM@s~SR;>SoP zmr2@uQQhbg)uGDB+Z^|;uS+Wp!7Ah5lLSASbK0Q$uk6^6lU)?4)Wx~#JU(aIJ5+Rf zOw<#(WY?EYa>~oOsVSfqj`knukw0HJCp9ozO#f-ncci;#_)>l6ANb>c6juPh)FLa9 zeudI6%jy(ZDv!L_licG-8+l z*wL-b>d)1zj4obs{z9X5m#oQUx4L0Y@4ZOV!o>TsjaL9Or$1nNZz14kxRe?D7(@Rx zj@deh<=*Sh`}anU^M&inkGRJa{jy}{J75aRJq?w6{MS1?+a8*ESHCF#>DN;HeqQSn z-$^mCD63u3GE2nK{kw;GwdE(AMUUgQOQptWO%s1y-&Y9dCp~svrL&zE^S#&3mAF&1 ztUUw&*1CU3RPCZHDa6Itue`X*@JQ&>-P)d$OjU~S%JXT7+|l!F_?$aT{cEUKkGkg> zWwm-X1XPD!x~T8f;vjSuB2#rBO(E4DyN6JgH$?*bop%i_BVOp9m#KGIMt65~L;Ozi zbj%bMhd{d5O%wZq@&(66Ee4giM{nCFsrPg|s-@;HXnH)Azka#QE;{nFQkXi75_6TY^8SNvPVG7Y#XZadhfM zoo?N0>jff^Gj#KXOG-Z`-F|UBk6|7R*oAOtZ~#)o+^|VY-&q4QKE3Ym)ZM$|=dV_p zC~a_g==+~nSY?NpSJkenGQ(=qSrE6k1K*4g^8e^rq0;7jl#X{9f)W537c~H)uvcl1 z?5`5<=TfM0>$XY^`zGRUMA9e~pXbiahP(TxKNxT1 zDILg!xCii(haheN+tU0_EJS5$n$PH*RYd!TSuIBE!AU(d(}% zOkb!FzfuP~XCT_r!3yfi?$R%$)W82nQSj~BOZ9GrK4Xv`<7m8!*ekdRfp6%)adI-& zfxTm~W9Q~#D>@HhguTH{d&v_vu+LFl#e|C34oVxpHUywSCdK$>DSiq@!;r7Q&$*!)#jz zx3YL@R>=5(POlt@sz0{Tm`-)MgkPXS?%lEXXCL%9TQ5RplA1c|c8_knSx0&}Vf%Hw zdl)Jj;jzjkObi6JPK4q(n=a1bhZL!#(?~ZO>`U>{b`z(+wBLZQT)DwZF`^qab@R*% zIO8%YkpiK|9Jrxn$Bzgme@}oe=j@a~NR9Y{qyNpwWINgVGSLV7nM?%Vik`wWW`{oJAp*enPlOkk>O2;c6-$KfP%mWb<3O zqChMuak+3qy`HK0gkCDEGDd0mP6O2Yj(Hk8elnC~;MvxiGM`i~2@8-CzQvqw4c&yd z-pB;)T1b5eE1A=uYZY)_3X)h=RmyiZ`Lr&$sl5w~Dj(J0-It#=;JCWt36vJ@_jzq+ z9*t)&c^$wq-eGUI-ER_a-kn@QAluaxpwdA*<{J52IXer2xY#1Ls31}AiJGM7()+g* zKX_`kf-c#}UEr#ubmBvj#;5uEyz-Y+P@{yw-8U)ZcWVz{3kOb?ll#H9ecVHkw|6n! zYxd=1!dCCU@!Z`^f@qrK(Tt;A%l0prFV}qPW?LJzjHNp|? zno(^dJ_f3`BYP*Q9F$hiKE_1`O@x$3zl!83IO3a=;@--GXV3O`&!Gm>R~zBhH84+*n#S3W5aI`Drg zX7hWcZ+9MkndfTRb()6f`4&X~o4)KK0oD_d8FYbcmvR|PyOs$Y46`kr7}Vp~Js3E+CqFGGp4hto2%kc9ErZ0VQa7#`^06 zK!^ur`ZZlzI^h+|K&d+ANJC*-x8`xhXfLV-^Oe2BrI(m7G*X#5oYLlv$oAhG0Z)7B zf7X_cJVp<^FYv3$6v1jY3$Msbhqie#ojX;yk*E=F-(-5v&@|#THNQ|FRrT}MBMvp)LlP$Y zYP?1wx5vws(kGEh84O&n{$7}cx#(WH(y@yUW(-F9q51505Vy_E;@#^fgQiJ-jh6;zB*=`zr z5`eyRu^0QancCXQHb`hB=eY;1Ddf3C&wxN3Ye~VuT0(qk%(3#~)aFuiGOlQ4zkJz1 z92Cn>CE4(RLuoS_x&=PvcF8qG_^d$(7a658F_&5BToi?_;}x(?UUP+!TJ?x}^_4*l zmvfgQO({H( zecD*IV;xsiasui11DXk-soV=*hEL1)rAMUk*C*YBdf&cP`_>P92VL_Yg&ml{Z@A}7 zGz)rIF^+W_!7{2*(n}5WS3(j4@dfi$T^@{c+%K0aLt(RLpN|h>^G0;5&Ry+mxjPSo zNlY2&epuuvVg$yGkO+E2FeYllV zCSdLuOfR|%)JFnT>+(DHO)Hqh-waH{*Qc?Qs?r{-KKyX)x*1O`dK?>$xKUMuYbq)D zK+6S3o)jJGlWBk9P`aZ*ipBoEthATOzjbdKja}gfC{HG*=Tq$kAFf7AOY{|ptnI&N zy=C;bfGwgV>uG>Eqr^i7kr|~6M)jgRod^v#43`zf>O#g;d$5Sqj~UtLP0@PTJD}n2 z7&4lhPCG;@HJnnZp@^y$<@{XR!xn_6SuRajxz4+AI&N`&mHTEe%JRZYKj=-=KwVkD zpnr#6Yz^}{2mbx3OBLSsi$>(ifHc!hr`=pckIJ3bOh%0%omfRRIRMV6 zuq_5W2PSCCbyv!G@lj&8}e+_{j4CReepBkg&Egg?!S7(`akx?m~Nvp4p zYVPD#`$-*nqb)8AkJ(8Oe1CT#NXBRmeC9FH7=M-3aiMu4#5g4Gyjh$PlvC`D``XQF zwkCMyk{wOAxyKHgQ-MBu%P0YNvddQV?jrKEEB@FJV~)H$mbf4j9ww3R5acp@7w;3j zH~!B0ILy8a;rQ^-KG_ZrOpXk};`sX6BQ+4(if&hd9^hyRZ;t}u%eZe^pR+RA@s zxG`Fq|E)W|opj&DZQZ&(s?c^L7W7dK@CrI_2Ox91gYQ&Ti5t3<&}swD=1ixPm)}WDL|a5Z zSp*2#xH_oXE$u4gKl6ZIEc!OP&>OGVlT+FRK^pdA;&-Fn{k9tgHOYdr&RHsQ7On+k zO*S$kU=o(j>;Gj59i7^b#dYjhHf##VHT(B0d6h-ujqWYS1SvQ{$<=f4-PI8iA@yzXQ1K0^+IHZDR6gBB#A#}c52 z?O5J)@IwW~?QMAZuW6rT<6=K6bh7I)q=`M~ZN2eS=w14e;NahofH zXk3l$sO!lrgN89(z^9L=(LS$f)m?xwTH>ELczRW7W>J53PgzCEYvhbI=Q+!1UG=7?CB&d_? z3V0k%e{H5Y%=PbDq4T^x!jzp(4};Ri4>Z8F{v+y`0gzY8{WFaW+|Rp@L{{WdE(HIa zPQ2By=RQRz1u6K6Jl|{zre01xQ}r-~zjgX?tnnjnHq0V9b_%UkUQu!PJVdr311&Y; z9@SZB=yDvavbG!bl+;jH0F~T#m3*6a^XM_9DRG|3AcZwnxW{(tcZt1)Jzak2BF3#V zOYWPpV9L{mfBwlG=^riKW8X@lCs*1QL}Mw^F+4&Dx@Ho6Km%_3tsMQfP`bP)HW~!mc%3P z+@$^amVb}V;WG{H(^&HLBccUjSVN#DeT9{NnTbJmV60L(iXcOj?crTOU@j%dZ5QZ0 z+Er9&9DEU^rm4`;zMeL(^W5y#v%l|D88K%`;Y$ZM;nHqFMo1~#^Q%t?EtLPLP4$Lq z%l=k2nniv<^uQ_{{}@htEuYl5zoEEbJKmw_=NtGg26ImhlA#L^ ztat*Y08JY#A;jL>Hhzs(x2?2`%#`YqgbwRxhvCTio-=06H=9XHi?601f3`rwlX z9Mo?ncB9BQB(fQ(eho_6rh-2raaM#XF8NxV+I=yG#+ohhy`@(=OR+%q!By|~>?NzQ z3-acG<)tfn!H^(ruwotb5N_T&SHpKJ&<8}YagycKCYghFjiYq%g}uAmRWU^}N%^^f zc`-d*XodB_hs+xAv17w#iRJ_)@wAQ%)DMIA&BKu}|`1HaNAZ4FVUwV(U2$ zUd(^d_Q~a&jo9f3bo&8k$>7-u8_72K(v=&S_Vtqv`_>B#$H>+UoS*6xtvOO+*Qv8n zR?H`KgYMwC&s3@9V%Sb+ZerB6jiR(xH23{vD=IVv-H8OrMDF=%+tZpg)KPxOSi3T{ znTb}#okc1zvF_Y%=K6cH$1iY22|uj6A6#?>UfTR~DY^^^*=vNn{$N-Ww6BuvX1HT( zW*2L+?6g1RC)%QNv=M)1G)XXQ<7E2it?GWm-;+9IVfv~#dgr7x^R;0!>E}ka$(&!T zcv@zV)M($MBW9SG=s=Oi{!Jr2*(odHSor-%6LlfP&yvrai~INL>Qkc2Xs%T_^e{R; z_b^S8_b>J_qwnYW7JWyvq!R9I}dK(_!RKU zK!h)~_b_<-uF21PR}BPz%Gzd+e4#jKtor2pt9F1xxl^e~)^cvpgO0_(#ZdNzO@}AO z^vrbuo^L?&Jm}pur{q5~p_$L0`|UiNd8=1r9G3_P4J4x-Q?izB&(3+DDva1VL6<*$ zvAe12Q|jq2Quf+y{44KXhfoSj@@txxwL_Lsy7#3`+%&#z4lc?O-kZ>iz4{)Zu2aY+ z2O5jpJl060*BQAFPKjIezZ{+$hxI?NMV_R6Yo8Vbh5)=`#fx6cHImv#DxbXW`+&Kb zOv%j9`~I(h!H!Y)ZPO_$_a^P1X)4CTcc6BgG$UWHKlX@>PKqn&nOm2V5$bW8V`Kju89m~~!+K)_fU+F0hr^hZb2XWZrBirIF zcdcAqdh{iD*%QeuC+L9!yV_y2I)Z5?+64%+8``Z^_G8md!~pmB);Qfk zm;R?r3XyQX8@SJ`Cp#wxmSz1PD6SzAPoUdD?-z}I7ch1`TMK1xOEpGSEX@(8es8ZQ zCy8zW_PpSQbs1Cx`SJFGtXlgW z07dlXo!;MfO4)O z{tWN@#L8sTIaRzNxJ+W5SfbsYCg2N<#;(4ICn?XbvwWjDE>7fj5QRzz>b}0KWWTSS zqH`IJpCqxmFK>qIrnfCpR+)$Oe0%cvhPuY7#A-17wEQwx&FHsAnR|1m5V5>ylky1t z?KrPuuCQZtZ(TH~&zXdr*uupHb<3zH5uvZOkp;Xv1M%;>TLVJm;I1aWB0tOb4|b;(?4o*_$e_rre_%v8`x z+%woo@nF2m7W@p%)@2bn?parLl9V2BZUlGfIzyj*PjdI1OW8Xv@{W>|c_(q}&i%X5 zflv!)@P*tH{}pV(CTl!^FCjeZh`?E#Y7W=&4a^`z@?J*F0$S-oZB@IsQi#a-)X0=~ zkq2P66P)`ljdB%%a*gjlisTP+}@ikI699IWtM!T+pu^6K%2zR1e;YU$cpGkZzS)d@N}bU3m#R< zj|Avu4T*KK^)wm5FrvXfn0hBxX!_a=Ooh3Py& zk(md!^u)l&$yf?u=Lns2!KoFjNOxYr<~tKu!vF#Ns9nA(&q&eKB?}=rTY<^a(O%>z zc6FOEelzkw$DW&cYN9Dxsp1O_ffe!X{I%SJziD2u=CP`TXjJQHRViu_JSDS|!>d6M zbQWQrZgBhc{r4}AooLh_M?Y~S~lc(xDN>T_}OFurv0wr5|h0Ur2PAB zoTooJJ4h5^k@yV{6L6||+VNm-Aed=sr=qxYlVYXm!irbQDc#QB0T*A?KndErV8F3k zPxjlgH@FsRqJ92~igF(V{afJF1-(wgmThw0yu)247rc$Y0~4O{e-}Y(FC7wuPGU4% zyOm2TI+4rWXvNXZKM_5pBO}%?H@@;lI^LmpGco*CQn;zZ^SPOAfIm~omESBBT3_#_=xrp zAYb78q5k$p*_YWSi^sbvBVFKb$k0gbA-=<#KWdSeo-$%!b~I_Ydrd}ty6OWO4&xD~#8H|JSU^Q~sOVT@#uBd%i# zBKg%-luRM9U-zbeS#HXq8OmIDN-$t{)6z~|+ln@`o3(mMJN}tdJ~K}sC9YiDCt0OGjvROMbI@%=Gs!EEw)-|{g)wNH%!Aw3sN76j>!+$ zN3|M3pin>i!{u0`rQagVch8@A?P)TK^5kvxx&M|dKSSTXEIAel8P&tT5laj| zZLq8KfIX}dp*369?o}BBbCFck3~&(}^K4$7nJtv+%7w9ORj3U?GM(Hqe?DBrFKVyF zG|J>NAZAJn^FxOV_{fB-IhG(g$+NcfKy7VUDsoBnQ?ncF=1~6hAH_)#Ucc?E84-75 zgja{^625z{{__X~GU%)Xbv;qPHT)hWG3uvZhl15wjQK!w>MlmoG6v!~%TBc)dM zX;snO37scbv;ykF)N>_#)r-^6!v2*P@X=h6#oZB~N1-PBp!WQcBnyq9g7a>q-#uLL zfRoJ=weq<$^jDAS=u0~34Y7BO;@4hY^B7RS*vOPh|AxTOvOYM}>`mw?Tq`?&aIU33 zqJ~q>OK%{UP8q~CwP!eTfJ`^$6p^$C2ZrD9)rBuVmK|^35!wAIJ6j7q0`8LLPHzlw zuX`U+FoKR`7g+;yNg)^hl=tL+zL2eb_o~3SXMJysC)<4mkK!bTI?SC`ADah}F$xzMp1mlQ$&!!;Z}p&Y`kuKRM5KgM6a594Hh)F>0Bgm5Mxv z+N32!oSD>&r3937uE<8MNTYct+XE4qw6nsAC%@+2zUK;9{kFQz0-CVa4_kxs6g`+U zSZ_zz{XH&rK(n#rg|5fPk#qltw#^V*Al2C2^5vl~JR%X&L{er9~S)< zjaOc2?oW9>Xu^mgn=Y1V@1cphP{3i-d4s^fPmuDCnicg#GtY6yvp+gkDwae*F;B*X4G8rz^#- z-Sl~E{st;agKs;XQ$xnTVKoU&uPGBH6TKZDjOVuNdrC}vj^qTSjvf|feL_H6FkjdP z=>rh+dV?oj{S(P*b)OvSO!;0{x^YALl{WIye;1Afx1JQ1-xr5ih80Mq{J0o*_*UfF z;V6(0%+!osN>#k2g-6+{H+NBh&t@l&b(h}P>37P-Ga!`#&^A(*WHXVf?#d6Oji+HV zWv(qsdWxB~{&pIc+hd}$b#K%0Nc(~I{JZ}qynXhw`u)?6pthyi4&;LVpbGSFpmbK6 znOE!YcDH>gXV8dj?P`z=XUEb zh^w;L<@7GEJsiC%y>?a_%dw$T)Bd63FYn1_H5;#|yd>h?JBj*=CZ~NimEj2VTVUe#G(%0*l! z&mvR}KVhrbhj*t^gEbVQuZ#x%1dn{N7F88IG$hkON;@(UL-pF>t2niC#H2@-X zb_J^0TWwPH%1a4CK`$@ihtiWn<33+vEMed0ls&r=5@5B++Y?M5AUK0Q27x)MG1AkQ zaoP_byyQAoAZ#v6aSGYb+zU+EDBS-sttCI$ra5YnWjZ@#Y}=OQ98+h48u|S%(6ds^ z{&dT>DbLxQu2)$Ns-peWPf=dNgG&Gf(>ooYba`E8L;3VdoZg|t`0;?E^SKs7ieUBd zdT?3}-LaI2*Qe>v=T<_#9Uk@erT0H|X%6_+2N%{+2m1Z4b2^Zp?YYs=b@O5p>iq8E zdG=4dwSDZ(038iOy=}=syP2jd1Js-~7wM-CKfHotU&W-Rd%&)d|Gq>15eBxmt;FK* z!P%WPy|Q!ZRd(l`7mF(s8Q$p;7Xv%okgtUwe1ytChv2=Lp-j>}f)q~m)zQFmyw6tW zGT&+w+`!4pRDE?RvTfFoAxIu~8h4AL$0>E_S>kchkLAtkS{CtWUl3|JM%b)(kUl!R zMw53@(-s4F`TF%G5!0pY;`<`X=&|qZh+)dR{V@|5t;*inmh*6f26jG#g7SJ;x#Exo z*Vpf%_w;{iOoG3ne^d(!O#FD_P0Ur$e(#e`R^AaF z1e)0^fqQM)1D#DqBtYBS>guSEjfR@NtC??{(ZEU}#H>1>Q>$x(E`aTt`opCC7%&6! zeqNnxP1goRY$-w5JiO-_7YaarnC$*`GQwwq)Xy0F2SXHZN=(ZOmc7O} z^>&|>+;p=SY5Jn`KoE#5?C}TxmRe^fU`^ zo1a}UM+=e_@5*%cr+5hs&KH>J9DSzoLa7w0#|2gOin@qAMG!o^@OE7jDFRoeT+Izs z?NA9c?yKgLzcbmyc+4%ObH)TvH4relULCX=r3p zEKfAJH>fV&LG`XB(@6UPjZ4zTD=K>wH?-rmc>Sp7dvNv=t}tAIDk>#5t9r4)7SpTV z6IX*3A`VLehOmNODW!W=P&r@K09}rwsOV;Kw%{(uz)$+M_JJm$zCr;SZi(O&CcRH} zUWa3^Cd<}L)H{52I<-}~U(z|dOYRAVE;c>34?6VH5t4k6umLioujrnGo;jumrf@04 z)}!6Or9Jq)YUazFu`^Qds%`YQks)Jf#ht}k7}Hejpquyg!_|)o6D3+@KUaDB%mM{8 znSKSeY8$7?5+>V`RVWf`!l~J1QscZ}hss{lMEOloq6RJ7AY>GSURZlJ-YMM)<%{hCI^{I%Ekahne%gUiUDE0H!>0+>IwK9Yg00Iz z+shR@MMIA^WdlYGlad#ZfPEAPa%nmJcAtL_4*qB4k(<@}`|&5;B+h0jpmSZqrdN-^ z&QDbk-}nc8s~jO0AOt^rLCh~M?%7qGtgUG=d@u%MOBQO`7@k3){^sfi370ADak?E!Ia;NX`oq$GRm7I5x z99Ft!{&LJpwdBXNsoB#?IX6+RTFNG*C+}54DDYxNX)s~%sK|}jm5F_Yc+v3Ch!=8W z(8N!FRNT8SZb;u#$VTJ?>Cxxbc066I>y8MD?h|$RJ&wP}s)kLH@z0h%c&ZmA{z{fo zD@fo1yPyIeraGKMX9}pklKRF1$FkngxGrjZ6Jir$x!a4@d-95(j?vu2>#nUmyY09I zXz`wQhbnbnSO+H=U$&5VO+N(iH;@+aNLK!8^44BSog%B-si44Oc5y~Ge?B9gR@02i zD-;$FI0y51;ozNT_X{HoxXgOq9zU2bI+nXr?f?NVoU4XfFb$9lhZ^^# z%c@9<)1NAngr{WxMxP}ESQ|oxQzmlxeNnK%mzl5^b7?wT+weX2Fl^a=fnQ$!=Vq1d zVSo5jkGdC+l3(ridP)odjCo2;8|Clqq`&krhWfXjeA;IJaF0>$7#&LHM@%fTBc$|C zcN(T81-$;O9RvCCN}%H^kMB{#CR%ix$rKn=CQrqjk>N*0~)@OWpHHrYtZsXmr#JyldeWMSs7mwEuG?idpp*&K1V1U z;WN~6ncz&$0wK-5T>~QB8eOIYH!cAe{!tnJTC`;n=TA_)T3~HqqRqPCSVU>(^X0M( zJC1zmjM!=8P+KpajkcbW>n9*e<&rw+qo2oj+&{Qsy!QHbY?0K5Njp%)RCCpzuKy-4 z7j$O)8QVfbfkQ+S={o+W?Hz)_%SYEz`oH*XrhkR5@kGxB*p(`w%dl^-+*;ZGQJbx2 zo=no0NN*<6v8YIMgF;)uFxDhUw4{2HK4Kl5#wMbN5*KCQ~op_3(m_!(j#sF0zd>Liu!sx*b8(L;;c+0l9P#HsbHsVHxH-i3lqF zJ;yEQ&~)&eu!_ssnxy5ep>>G)z)L{4dPSEuJ?+dknNM9mc z3nSeQJS?lI%f3<$55zvv1iwCq<;LT~ZEu+h`Gs`&8wj;#SvjO2*VZk^SR~`HQxmhy8WHgfu*Mzqr{|7s3nS({%{XBq!mY60 zRa57rviOY2SR#>q{Fy75)+${b6z2O}eDMC-=)#?`D~q{8wOTz}unI%(p&rKkCB@G< zIP4xvh5;A*#D)>~cQW4iH z@ipI4CJ}5w1GTyQEL^AlVHEZg_vG?|Fj4VKSi-pAnLB+Qxx`2veZf^x&5qK`mTWLA z(ch4}Ixsda#_@g02i}_L-R&m7sgrB>*-pT=~@nHsN-O^ zsC{cmW@?el{HxUsvv<1tt2@pM_Q5g`v88z9#+3``)({CKvGQUEz^LVs;eo~x)x%l3 z>lDX{o;e82c~&%)o#4lr<|2Bo$AqZC!@4Oa`|MYP0q6`hWr+Yf>Y&TaU#otrw#&;u zQk`H=p_Px1iUhaNw1yIoGXRdeZE%HJpxFUeOtiBZKh_A75=tD%eDc}E5VXuixrrSyq%@RR{uJ)%9~d=`O39=O+5}~Vvgdpe zF=?XORdXOzpRL>xZ5_+fAZm zhjalRY>Mmny(l%0p68BE7*#JC=wBsPPW7Z-^lFa<+M;jbVd3bb;b~gl7P?FRnDzz- z)AC9l9CR^O(tCq@wFHvTo!=RurOfrXlgmAY^j6pm;~3?s zM1t$PHe#h~Gy-#Rvb;k$VYo;CeeiKy5mPUgk1T0n2*enQI@INS+;BlKj|n8wc++}d z&*?7NFH;)rT~}eDwp@585B|ooCrVohmii{I42WIL>B&*nYfL4Na}thB^4URge>>}1 z2kxHCi5(2c$3K}#YJbR{Kn6+OWhm*=qqSEXX}FRjtE4u{F8%JBY={0-=-Ak^cm5k+ z%I*xXQ%3DpbtjwPE<4i|`B&|`maS7`NRU1&1W&_F+b=<+lGc*@{OJjR8=@MwOrz+E z4D}r2Yw6!inb)vDewJ0+0{>W};@zoJKgkcgxmrjVgomWS7>QTib8B!tdCYflTMc@| zM11W}2RL|D@hqF4S}tDQHvB)1&N8gY_iy7M5|V-<%|s9cq&p`dEg&Kt6Oe9@9ves_ zFlj+jIw#$X?vn2AZU!6sJ^Mdzw&U2bH#>IS_kCUG_dGwR7kewZq_%ZsckrA5kjj+- z<#4}}k<{0r5%f0^UmCfGdpjzKmqkF}CODZ-@@{7)>jYZe z+N(9G+x;1)|BLYzb&v7D1+GzC;+A;-%kQ$aBH8IilAIcys=4 zo$k#jgW8PF8|Q@Hh@AT@m?YRfJmc#wnM#Z;Ft0s`9%WmXkhwI{AE^A{CGvCEw!cDX z9P-}a4QJl5>F&v7HR?}aT7EOzF8tO$p^=83?uWHjlf9U2;A_=C3cqeBzjGB##@YqO zOE?15FusVj?Ew;Khjh8}!v`J8?updLqYwXnGgB49V(WOb5HXY>yJC;s>2Y0P)lh*E-nzUP&aU{y#YKWUL zZMY#Rkx{qUG|bK5ma5Srqr~^Ou7^t# zd30WkMX_e0pVYNBA%CC@9A^IY35(e|6ppY(Mc+(zyij?(OGkSjh3U0Op8UeDB8Mdc z4`4*L^nN5R+Dv^}h^FF`V>Q-fqF_bLM*WAS`5-0u*35Fwy0E&f!aukqB+O+#zb zX=xvhn?~5efl=6RDagGJl8E2Hk;2>odl5-6q$F(33GoAJ1A2lP_j^B{+QQ%_(=#6X z-r6&X{0f|h-7M^AqCDV8-FRoBG>Au4iIrV$pS;I;O;z4Te zQNQb>z9J72>nBdXOp9cSo4dsx)mK_dSanAH3XU;U=xmzvWw2BN$_NQ+)z?CNQqC4q)A$hZrwp9a&5j%0rv0rAww~PLt@-6j7@#Bc+ zVDAF7G}5!gr&Rk3TNDlDv*q)4_%2~5GrJ3|&+KPpWJUUWws>ErCSGN&(Y6EZ3Wx{0 zT4&C#YlYk3H;BC{WaDSO*WaQ!Hr{M@`Mz4MaU7c7xvFq>%R=d4%9XR zW1wB z78s#jU)c#afQ`bQ%S!23T<6Lw%}})U2+!xOOJ(|qi;P7O;$f7 zKIP{7u_sxwdWm0`wQ>y+H!|L0|5v9`fmkkQyXT-uNAmSpWw76@r@8&F`FaOF@v;%g zRU7e&rrv?2$i?7~gOxd!_EkT#zsy`cRl=3KjYCMjuZj7?0H84Xo9$>^bQd%rTT}5# z`8(SA`^J5j{MooA;`5aBpVFy6;MIvXyN9ytLSzP3b;3Uz3vq1ohf>V-z0v+>@CUXJ z`f5~=vEi~{qcVQ|)T-v}3a}tpB;Ju^sN`^2dIN22Ms}d=k+~Z$fsK{%4l*nMDv5zC z#)Y=ku|^}TH_y6m&hVPnz!UBPBc5(CC7=DyxPMJ-Q*}qQ2wPtEcs?Z?YK$dw6)WCX zG&E?)pLvw$d8`^?5%_!?md}y81I~q)s}K{R>li=r-mpv=F$Az1;%u>I4b$JTcHw^g zdv??nvoD=>J2d;xOl0=eM2%Ev^vRd-Saj4~R@aNmzPx=!&EsS-m#mZMomNu8@e6^; zX*TF<(3uVsWVIVms~_>6?9ymiQi%B%3%SEOiF0P{F{l<0vDgi&rGQz*wM^AbMZdh? z5nsHY{n4Jyi|-fpB1+op+FO!G*u1aRPc{mO}w#X4Z%^Yf-{`+7dgy}%Q_AXtciU%5Rp6mGf+ng zfU=EkA3~`pt1#4L&Gh~9f%~3dQg}{yi1w{Ht%~+%Y>oj>qI>@+LAE~ptR6Dc8(*Yo zQz2#0BG?e)udiNY`oqE6e5K`j%i4q8FYPYYIee~s;0aeQ^)mr``C(Twfw|a3vdXHj z?vj&4cdBNb6?ARjtC9># z(ug_AH&7~kOl`#`CV@2wE*{>*RXxQ0hhs(Y6s*n`P(q@o!YV#QM=*(X?P2`VW`B6{ z=xv;KH=&PZi;D+d_jH%}T6Aw-&{7{-At5$nJh04B0Vkj(O{uVm3)K&9+N(vJSM?$I z@0r9mTD;9>GwOxvIr6O!nzrIqo0RT}FCRdLw2qf%HMO!HNsh9ZhpI`HC1!^)PbRGT z*H7^%MnOl2@!3K{hWwrHM+XTZm7J!6yhm~A8;xR9y&g*WvX&c-66`DyMY~Q62K%p@ z>obh#rX7gzb4g=GYVqBjLFX<<3519135 z0(V+xr_ZRG5l(WV$l|}zX8sT_D>#q#ddLFvoC_{!zfCI-p&FGNeeF3wedRv5qvNdM zs!gH^etA@V&6$jo?5{2x|UNOQ^5j5fSt0{gCB3!_B~%G>}yGZDI7c{=OSX z9!yTK?lc7e z4Wok_!yI;)0A@m5DltEoqK?XH3qC@eH3I&OBLl{=H>Pte$WN~839<(T3tH&M^cf)5 z10$Y#lEV!H()3;=%su2e&4l72Ny3my`6r@rTaudY@^fXVr6jq7J+KS`iUE2BpU0&XTj#jNws#Z5AZ9^jAl@ zwB2mBKOcyzs!8SEXuZekPAq5n@ThOeD_#Xhe&=a7w$8aT!oNfqEaQhREi2(eeDf|F z({(ZB037=Z>y=AcrOokM>YJU^jjl6P4`QCaO(_+MsZhcqd+Fdm`piwaVo`uU+dk7~ zQBDW`)>pl&8wK!@+u~|y85s@%2SXAH8=S6{5s2ju%AMBI7L5rtMo^ytj_Xk``%sFu zPs)%V%IhP)O)r!7;izPPVP$0I#&#&gX4abNn^S&qGre<`tsrlLE6(SJ3k?-*+DcMS zPXgm8XwU-4hqE?}hFEtSAQQwHb@!KBQcS#Gyn+R-x@l|DdH;IeY7MhDdwo~t>6% z=2F^WDl7R~G(H{UxPMln?|Y{oR7^2rnFN5A7XpFM`I0AR&)VB9kF+l_BPK2CCCkff z*xmZmrf@Xc=8~G`2il)%gNgkNchORZp_ds5VNh;$#0Ki7AKvk`1M!RctHLpNIgrOl z;mrqPO6)kOEPq4SrdIgVSu-hOdlQ(Fe=ZhF^d^mZM+-PiT z;3ZPKeoBruJMaC|#0$$YEB(-+ph5DgSmqKmC4%S#Jn6>R&nv^MD(W@QT*7O1mo050 zx*DiOz#qCB#CwT%5?lB>IoWrPuo!MyOrJKG0)*6*{`_LssP!XV>=VVUK=ETx?hYr5 zl*x%RB17$GV( z-tKE~>7fZ~7o&bthC~2Dr8#+}WeNr@ zLOr^g;>)y{g!Y#qR98x3bSxVs9pWtrMBF2Ayo~<%0tXSF9q1K zVCB;;xBBFQRupy){4p!^8_(#I6MtUVt93=c%yd=lw2J^h$!w8bnHNPlDRW<;T{vyU zOwXAslz8pijmFc!?elNx=oQL+TVJQ&*RYhTI<$7 zmjUoq+TSim;p;k>q5p7LK*|19W5MII2YkI{aO|gF36UVI!1C2uez!scjM2vOHw(vY zxR>+yVpOo{L?c+M&HE9(T#mH+XS-NEKCRVJ%tj48R!*{^ya4pI% zYpWzL{UaN_IdEAq>}c+TN~|aXt&-VAv&vG}2Pk*P^YYrnkPMD3eet@j$hu*Gsnkri zm~Xs~`Pw?!5lI`XYb2fSuP=j=MjCf5^z25-zVQhYhr{z)lG&2w8oG0{brz{F8#7-w zip#`Z`@W!7A}-WNGWBMmOnvY+Vnz^M@Q4|WuM0(-F2WI?Pw{fbG#%#J$dHAf&Xi-c zI)Rj$MubYq127g#rs~ylh#F=ABRVe3r2IZbIZ6n;5YyCM3Hz166&!`~*ns_T#!fyW zGl>y^=BCuADugR0aUJ)wk&y-I&*Nn?L(0Vn#%3PDD2cQjC)-zKlg4bD66}+?-5>nu zmy}*wG?4elg1=7d>Hcu*OKnwo`M_nTN)o60n{&`r%a1q!HcAm@_M)!kyuL^4yBVvj zRRP@5*&^bWn?Ve3ZiW#3jIfvHKC44ut^7lR+j`@omKB6f{#i84L_Zg-{Sz(pP!1M4 z$6*om8+M=9s4w`6tK`rn`?!a%V{9>a1K7Dwm|$0K!elf~jtk;>x_M4rOk_s?j%-qP8Cz5KK`pf*I#@VG@;RgO{ zpO+?(LRh*&bLopNNf>FmSH2tL*fG<3&<4dLUPM9QKVZe+^1~0HK(wC#=b6U!5x0 zpaBGy{$m!DfL9js+HwLiM|lO^0?13|M+qEsO)HatMja9HQ30iLrnz@=hwsDu3Oj+3 zX|N7Nq@+zZnZz%)Ph3l(WBk}+6*;6$FE*JZ&11f?{Nm&L^Rk1_yUAF@?dyvVZK^+t z%!9EV$Sz2Z`eQn#Xs0t!_au5Pm4|6;Wd*W#Pkb&U%_r6p@IoWza~4~j%@sx7!Bb>{ zLhObpZlZas&o%XD4k_Htd>{Q#uo+mOjO|EzNIkdqa@=dg|GJy&x#^;~Pu^WzxEn}9 ze0~lkJ|LW`#Yl_Nb*00_c|-`gx|qk>jJCE?ILK7k^qaaZ!5nXw<&HnbPrR`Z-N;MX zrLzpueQhI7B=;!jRqHagP>K$|tAimo!X^Y|obs@ul@K)yaPyD*p8fZ>k_GvZ=P_s$ zgk~)JpW@|Ya4pML3Am%=E+j#}AC(?^Sb#)hXe%--zduFv5Zhc-Xr6d|R92gBv1H^w z+27{4sE|LfP-Sl|7>iRWm+8Xqmw~Dc`WpUNty)%R zr0iYEJl5Ezskt-AQS5_v6Z?>d!4^ihFr5YWRN2xSKm9;i>aMJ*_x?eyVjdd@L@dVj z0yZ@Im}FIf$ZPQCE9af;OYwH z63|_4)r4n5g9({N>8?G<17(!_XE(Ht-qA@1l&SWKV$Vf;8lXxuip0Bvcc-7!mQdjx zDN=RVpxqx~I)qoV!`3Oms`x@?(v^2O-$jnexejX+VVmuRdDv$AsaaP3Dpim`|GpU@ zZ{;rJZJ#ZZ%;Ds>Wx4NU->Z_htCzk>ZbO5?7!~uQ8LrDJW&NUitV5Fcz&y*g^4F4ZpS;T0je1A*{To)S)vo zDJuS~9g_z>Nju3oPuR#T+>G(8BxzPnmcUhJ(trp;77+Bnbr-aw6Md)rw^Is=YDWwn z7xd}%+U#EVvF^F0`a>p!5FUP|hi5uHrA)QEL)l2&cQ)#9R@H4%1GQ~S9P{81>|Zu) zPB6W)Gt4x#tNWIWF(e$KeN;oZT&AM_cx|I5*LqH(qSv)*&5K%DyTx|RHNEmN?x_xe zxv5JRfOrM`4q5oe=Tj$8Sk*OQsX|gdS`08#RthLzt)>X#X`?|CRtvd#77yI?;Xp}S zvStv@vH(-Qqg@n(Jw~M2{6#Tb>5#%&Tmp~-AA^QNh@s4A)qfcJy$G_Vrg>gTC&vG9 z)b6pyG>!8Y1D;F_Yp}3XDkiQKJ{g^Y<9w~nI0KCgfv7!*r;oi@+f@G4E*5p1l)n2= zz=jPa-y=HxJdR9a=i!+xG?r`*bdLJdnbfrwr6V3Pqfs_BNCypRDjDuM;bn1WGw#5% zgS#B3*;BvSYTKK$u8;=lDQrDO2Jdf&=r`0$^M?J%iw3;%ulq9*L|-K;RywJ|XGIA5 zYw=rxW~~KQnihpGwp{qr@%#Hkvg{ta4YFF^hI+oZDPXx++bK|_7e(-2x&=i|{TR{@ zvm6^03*f99=Zk-#Sv!P&H=T0^3KDUlOuoyljmy3HB3>N3k(j7EmIW5u$U2gd+N9_k z0Nge~G9AlI{=6Qel0S_+8G|D6)&pU2$_$YT=*(#mmo) zR{?QcCHkiv1WlBwY=*dfwOAii|{l#Ft|q+f3E(Y@(`2t%wtXmomSX zzEpDBO*l5d@HLwPyL6TbiBuMz9HtdghMJ>E3e_=pVfvke$2MWiHe`39WI;c17}`T#W#J5N|+|G>-Jjy1iSb4?N7PsF~S zl9^YjNEpfs+93tzZ=;(+*i+1R+U;Dj2_5=5_Or4il3j%MUe@a4VAIKw_h0`lwbu*4 zlG>g9Exm0_sW&5+ zB++!gHj?;W%C7iQd{B0<8Yb@~p`Grh|7Y(_rfd6w!|1nfxG5{G$_l!dxP24#xs_e| z@BMDVel+@EVQKeo9QC93K!;SVh^_-cvTyB|CCv5f*QOh-De{kh=H~k{N0iXHa?eZ4 z1{TR2>V1Kkj9ZB7T*2+fKc-u>IJ_eZmDr5BK~NNbA(OND>l5Jp@=9|K_7 zAHf!9VjUx*Bd$i^B`V;41)2Xf`UhEKd>aEme?iY3s5bP5>oe=Kl$i>se@#|$V^;wbd7F%}0)VR3K|`YOGJZ$rowjiNd~Vhaj~6Sv-k2JWwiyK2ci%)b zr!*xl%)TwB7=O38LhWE{WMHG-My9sXed9cxsx4`F2so;K#W=|eAGG?s)7U&z@N%O% z>BPvCaCK!X$?SSeLqOrDhgO<7ef;v_@5U+7O0357TuWpWWGhidW@y>;-GPo`z>TC= zxne!)>+NH!F{2?ngMlVZ@uIjI3urb4n!)^>&jk5DAN!pHka8*Yq-NRSW34^Z}R|F7ymVfx}=OHzFO-yPei1&Q5P&S<>K{#xelo(nT_5Y_)0U|($_(OIY#rNbg`xnA_>Dxu~V=aic+cyByG{7}1# z|0{!EZ0+OtUSkK3cd1#Wb7bn84U@YcEz>x(Oimu_Us$2k(Xz0PRZ3~gvu5id|7y0s zHmGjg9;gXJ_~0`4-T%zYWj?Z61YqNTvMimC7MH;Bn{7Kx4)p{RX^lJ9l&$Pg33|=4 zd&R8<;jzmF6?5R{jaK%_Zo>}=X&0cF8#koF#`F~BIYBOMv(DnT@U-2lV?XT>o}UgU zZ}fJRcdv^s>H<^?4s#}b?T_BphKjS4?rL!B=zj<{JxMLvR@yYBPak1Ew<%+ms3;jT z7?pri)=WLhmY|-QTjlH+Gg5bV^jEAaDw7bYNr@WDNO9|BYM!AX;Oiapp)geWU=Dg?!p-V!%QwsBAQ0hYdD7irT?CV_QB?#%Tq0*wgKKnA4Lh_|goD{6L zWw?)o{%rD_pP`qmfp6&%WFJh0?2j`Q>qG!XseF)CsSTGjf5#@;G8*C^Exvp#_#aN` z?#tbBh}5!ApFFZ_{g()q^uc>fez~2M$-&h2y)E`33t?|%+|Wh?Hu$OFmBmxL7%uS|;fU)^5%U|QQ>ieR1DOxJde`c;+;kqlCE_-8nM%eY7X`01V7qGup!eWi9 zdPL?Sc~fYWV<=i%fwiEfzpHKuw-1yV(L9wCP2O%E3XLUbvU!>ZI%FEdyX=8rvqT+A zK&J-u`$;q;a`&pgwBRFhk2LS&0qk7pDfC&N?^*8JNLRqG1g7bYZ7o#k z+;^!cbist>*=`_M$opJs<3lO)Z*#g|kqkVnZ+78qv%18*%8{|XtGBLxjPPz)#0t$r z0)*5I{o!1ktkgtl$lP8%~&-gLm)R-(Xm8v*KlE4;tQrmhX6<0~cZ{NC)2 zTekYcj`>guKBYIw$lt&p*PN!pzpVuf4KpcqN!~!+2bBr)!RLTg+G{wJENolfW^5EZ zTvr;aVOCGaDxyzNbDaCum(gz)tZ67zHEy}otmtnOmi-bheKyVq!svErwz}@q_CY^i zsgKO2_(YZ=`VMEd5ea=zvsq|?b_qbX0%W)suZV(T1l^2zM(M+g?C^rjGV+7B%U$WE zE$wIX?S|SP{boD4Iw>_>hPmXsF8D}=GaWYneN5T&jwv(a)&YEOfyL@d4o)Jbw`PVL zMfqY|ppsEpBqDjOTaXsC9Sm4y6OsVz;JAPf(vmAs$U9uaHnso5iPk;)bFa*S2?izn z#jS-E!zo@POZ=+$Jj$v0t(?GehT-= z=@H85{{QR8_SrgA?f(>+*^}vZaz#V!x5ZMSM$s{gSwE$8bszJO7<}|&zW$ZGTaCs; z7CW86`dmah0Y@3;^egL6_St@Y?Azm>xMkH%v*ot2ZV=`e`G$of*5~WaH2F zXWD?Nuj1KN!}O_lnSnE>r!CTHzz8QA)5+t}z2jYrW}-b@#z;)KM>&VI1e}BCQGL3Rt5+v8khomACI{nyF;64r;gyEYP z*@;|9y^p@Xd)4OEV%<7BejhF3GqwuTxyI}G_p7F%;#*=`}lAZ>_Od`bl4RJ9Bk8g zC;%(UCY%G-u#7Qvi|j@FapnAjXB@;v`yE(^beqF9O|KcC_FOCE8brDj9l7R8Xr`8~ zzikyB>IsYjRF1{S64+PK%z{bWZ|iK8-|*=BeYqZWQ1g>Y_hda4x}H>Qt!tjJXsdHQ z?R5R5GyQMin98RW-T6nfkx@^U?VCJ)~k4 z^q&E?f2kVTra9a8ALV%+k&$LsIJ|4LdDkWh$xcTfxnV_Y8Hb&*h20J;Qm5M3=k&t| zra23l0Ed+U()Gzx9y?^$```_&z>^kPi40aLp@##vDna`_j0wUS9`@0|J{d$WOms=M zM!CG^D*6Z)Jpz91!amN_xHF-2Dh-L!*tJU5hUNnDX{~9 zyv5Fc%`||H*D;T)5epWNL+Vd&|EjQcml+Ei{ROjsJPKVlw$h?lEFEc`c(XKV1%1%pG+)IZ9V$;4``1H(19C=}+?nqp!<$nVsnD zHKcOyi5}9Rwmf2+u&zD0l{s^v;~%LacfmZ;M}!SKh<9z|$a{&T7V7dgw#DDpmg%vb zh=i<=|8QQksGjNfJ@sjp|M}ZniZ^HUc}_dW0X}5M=h?{6TTveuS zD@D!?{MWE+Z2C!Z_=1&TR53oCGi=)TkLd6}#ACOs+Y$rTWT}UH{q5CbY)A&*04avT zYNa4*u-T8{>EGX67oV<}gc8VE1H50_a73X$oWamc%P1jJ^tC@4h|pip*i+9r+Qnoc z2_@|*FE0FYqoeN`y(-Q(FKK+Y#;1RL;u@Z-hx%cBp=+CqoP3D2Oing8;XkXUwW)Q{ zYf6KvvVoQfpz-ovuOpqYeDE?#12VRP^H3;Da+viP!`ewdWKb9Xw4FdeI+$Tr`YZ87 z^qrLlsg(|4F~7LmsSF-r2a6YEj~7jWsiN(A5a|ynhJi?{1Abf-(J}VQfvh(({zpH=Z*hs|wwm<)SP<$&&zk>!q)+TB=_;1;V!#EQ!H!0Gu1dFgNSm%9&`Iu5jQ5+~%(pL*bx`d?6Qq4RR`IO;jkzm3`K06+LTa7k zalxpU-lSR5O=%;6Euf#WQJ${*>9~u%@!0WKhHG_^+O*n{(HO|Q{ohAi%PFB~-BMHb zEX%?rwXyM|bx191<8{iB3I+Og+Q_2o3w*j;QtWf6OY9;qLYW%Nc0M{h3q!4+M2r=E zSzh7Y>HFf_6VRA#pheHZQ6OH>9d~UL>}fst^}=6&!i;W;-rGR`t;atlt$h%$kL=2) zzY+T1;1^u?2@`F9k;T~3U>o$a%k@@xEQVLo?C?I(ex|PDL$vf*6MuGQAzhCRyXU`v zG4IKm0K4)}n@8@6jJxL8bneMj>W)u0i&~>Nv9bibn+Xp?qI=%8aSe}XQCMeq^NmSL z-s*|nw+{A3C5Eb~p>&JZ>NOae+5>xgqK8nJ_}sniHe(H`Ma(OyKT*~LDjY`*rApYk z4161_f!ZS$ya2&wWKaU6l5R?OT9q#g&ExL8fXgfRunY0LT_*k+Cg&WwK|QneZc?}^ zohGjFbQDidE4ZfBe*+Y8D$9=aJ^f)>>E;B0K2CvS|%%_Si z%hi%v=^wo~wMlRfNUPZ_L^oc1>zcRgmTMs^C9RMWSEAHb-*!aU!jN!lb&vZ>|Aqt! zzBkJ#1-s9@0<`>xqg2_C`lnVJ4_wnd0|tXRiox&BGs1&vM6A;=av8a7ubzUgMj*#X zP{%za!zKsKawbXreR8NqQTsM80q3hf{iiQ+_dF<4A0q(KUfO>+eb_RuH&6G+rS-7f z%F9b;O{D-i_z)rjBRGY5jnQ!XKj6vnA=|jJOk`rx?VQ8zF!}`V|H5(K1p8oofNT3$B zt<4kj$}0`bLQH>nOtoG?(@&=}(>R11W_CTd2;e58F}qHTp-DxMMYTAvfcec$ooc@D z(~WrCoYzf1-qKff%*nz-`j&0kQ5XB4h#p}xv8eL}2KbAEHX0<*UTvft)V0I^A5Io{ z{X&L&k00opaI2F568G`wo=L0k;iCteO;tW*t(A*zOw1_UDvm#ThkIRa+htr$`nj9| z@EkHD8Hij(Ir$i`Yb1j-&dOW7bhs|stPphVBap)V7co|~7I*Qq|ERV8cEATgbHGjX4zR1#t)fYgqnn2IX#y4}a4IgcE=pmtKFG2H7` zGr7)v?g`a|bdGLjE58;iec-==4&130NOh4Ko@6`0+*Rs)9_zSRmWz)5!5JRbhkRLT zAE@EPDOu}7)302|bt|7)=gGM*_p|*F-iH)~<0-WkSwYo|5qr{?ctz=wJ*>^;VPCou zma1RqcQ3S_G@TME%jomn)CSw->7wx+Whc(;xR$(S*#O@?yvfF%o2${LXIFY{RA&Wg z^c&Z^+AIxR<_2@2Y|M?cBKw_bq3Uy+g|J!~SP{?>5w%JNw1R&Bgamfb49RRC0j)!V zQ_`@&{tmi+!Up)xiPTVYp~H_^Diag2-$Fqhad(!;G{iYzLo61;feb;`_br5^EF^{$ zi+8?Cr^@k&%`LYyU_GI$ILx&2%lvoQI(n!AbHJNv1uFc9V}LNajCuWTf5cBIEKdbt zbd*!MGcA*)0BF(VUaS!qquw;4l}d@afs?!AoSM2RKZY5N_etOD!}lJ?`$47aID%e@@5HRe;~$*@=36*}t5L*4pFiy5TPHaqrT= zdqhjgFOJG47HRyxa9qBG+h=ZK-Rf%C4M{rl@U}VNkNFcfSoQZVCEjkZ1Uj8gIg`#v z^;ze6?-SOj@8K>~>nU4(wAV$}#43G8uU!WP#-|>CZ&qI6h{Ev*j>$cp()cbqa8d6u z6ZaRv`5%tqp?2Gvpx^yCp4P7}N6SK}k!8@dzh^#G38{7I?|kdI#HY6$hR=DQl-zQ- zlC~Dh%4-s+P~)k+TasW7gUPYp)nJvMYzX}dGV4bDtiHGTye!61Wmi=J407^U9baq9r=;Y_b0^OZStalZrb! zlY0+12fy)|hC09(@vsjqoU3N7dLva&=A6=ArL}L!#i0al^t+Ug%9{2ZQtU2jj1wvt zG;l2hfXjn<1Zg*-4mqQB7CDR*0scM}TuIAb`TV3jvQ7GV_Sw3FA`_LcMPi55YcjC z(VcyD{BgkJZQrmN{^#a~7>~zLp*Y>2gXXwRv9)i>z9zHXeMI+_%P%#6XS}XcpM;o) zf3mkNtmmv0Pnaoo#P1S%LYQ$;4w1pi6z0+#5A|o(tHzad4u;Rt{hm5p?=R~n9CNs% z^xOZ#InzEC@Py6J>KL$)Rx%A`nHzobO0!|-G$RA_gdYd;Xu!hI8jcWOFFBT*&m4EN zqfIaBnB*IG+CmsR_%!BKT7qsxmZvh6+&6MR<+Dh>Z7y9}v_DZvK?EL0o zfj$+NA7=5WiCv%UgGB9`8gYHGC?~b4r1m*qxT(rTAqhZre<8k!+@ZP(K}#rdiAgD~ zdV>X60zV19@s!pJ7mhnl)^}j}NX}gr1xhIQB@4@w|6V(~gl7 zIJ)_$z+AKBwd*rv%x-Tva^diqw&Ke3v0#XZ9SO8RjTI4St>XT;vR)foKf&E2O0r!Y z*Fk;BULH{4W2}Q&IGZ|kl2-N}R3U?DXF};O-5LmuoyOGhf2sY@_6IaTi4cxZ0GK9D zT51!SKl4pw-5NF7Df2|y0-@W+0RH;F0wi_yRa|>FkZ+(+HzVEC%-p#s%x5$S>Wh!Q z+2T4VO6@IQ7OW;yyRSkDB63pMQMBJIZFq(-h+oi^+Vr<0(!c+cwF?q4CfFYw0f0hA zB$5&uAAr99vYG7`mL;+&#CR!&TV)Q<{M&(NpI|?-$Si|Zkd1jv_9Fz7ZbX#n)>9%`dtMLZtjgruk=@tb9P?Is7^TX}dTIZZur|A~hZVVJ$UqW%-1 zn8A;*+fez@OK>c;z!HC+?yS2z#vET$gMXkUDLlR<%Urj>s$NTYi2i=N9b?_F`V=gG zrW{fhb5mJnY|QJrJFF*uZ=Dh85w)Dr;B@eH^xfeHvR}h{%~7{k%$VuB<#PoLu_;Ot zEnc7WjUnrJvF0`S7XeCpBs{x8F3+C7%nOMd!psZI<}6Ho^)ZgTh+2Y zslzshgFpdWYnXDgimW~l?``8_CO>DhQ9Ju5RW>0M^yaw1vO?ytTiOn#f%ZlIIA?0( zLU!pp{K(#QN;Hn2dk+m!GAMG+5(&u1-wlP@!oxW?y9e;G%g z6Y%a1w;HP)sR{nZuM&lzQ)9C?XFH`>d4|fwM;{c@;pw>Q8MOU`#o*fkzP>sbmT+D% zr>_31M(fdurk~zJ^sD!{O}fS^pL@cn=j`-2Yp7(6_6jOIJ}1Tg?n*OorL|$xuS5EE zydpLZGJ%GbeSXg`rC+&MN7UiY{V(^A^g+VZ)fl;P;ZJf6f6;K~%ukuh)VnKys_1vk z;r2IVFUDzSZ8vI-f2o{Y{lekO71^h^_$%JyZuFVKEjDS-=$io@a4?eU+r7J}N7PB# zy}nSPVxVm8!h+%?noBM6pTYNMnb)l~KSarn(LJB5!f`zo7wTW@qJ%t_{rzV=jD(D! zR6rwHv9_^!@6O`bxPIvQ0y?V>KbKT$2Vu}Aiw~Or(S-}$#Rk9jMDA3v=4$32S$^m4 z;dWDIHqDvPA-MdMT6?_xRKNkt_-8Eh$>(m%Ec|393GO$7eXCJ$k?VL)+9pX{)v~5* zwa2xPvyn$;tcxpTBqBd&A&K~mmvE{ZcY9D3a8R8tYbO&!Fq)lHVch+c)!;=R7N#++ z;?0Y1W%{bW8I)7jWKY0%bXNoqYw`BTR$H`~@=7GkVJ(Mb&F_-Z^(Dpz?C1Sc%4q`#L61+zpmb7 zcSchEfA~}SV_F`E#mznB1u4(7x2$u%itprAOU$utcrsCpfU@W(y3WFHM#2tk7f}p- zGsE?UsNZv;4~meGrB__XO!u?Bh`O;57ZI({GvuY5!p$k^aJ}2+sjnNj2TI>Sr&kM~ zx;wmay~Ge=reuX5GHdB{g%=yis|!xn9Gm0Xbnh(?I>%ej3M*Ew?H`P2E{Na2q^`)Ix z>v^vE{>KyLclg8|{(4l(YDZL*49*EVgn=^qG_2*)n9J;<+nAmJF2`O4R)El>T%63S zU8%Xa#a2CCRcFON5`s@PamKXrZ4>?`yweU`QPP(Q*weFiEfN!0djpq14xLx8^Bo

    pn%iPzQ8^MevV-^# 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 z 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�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 + {editable ? renderExtensionsButtons() : <>} {editable ? : <>} {editable ? : <>} - {editable ? renderExtensionsButtons() : <>}

    ) : ( <> diff --git a/src/dashboard/sidebar/DashboardSidebar.tsx b/src/dashboard/sidebar/DashboardSidebar.tsx index fa0f3342a..50e6f25e4 100644 --- a/src/dashboard/sidebar/DashboardSidebar.tsx +++ b/src/dashboard/sidebar/DashboardSidebar.tsx @@ -44,6 +44,7 @@ import NeoDashboardSidebarExportModal from './modal/DashboardSidebarExportModal' import NeoDashboardSidebarDeleteModal from './modal/DashboardSidebarDeleteModal'; import NeoDashboardSidebarInfoModal from './modal/DashboardSidebarInfoModal'; import NeoDashboardSidebarShareModal from './modal/DashboardSidebarShareModal'; +import NeoDashboardSidebarAccessModal from './modal/DashboardSidebarAccessModal'; import LegacyShareModal from './modal/legacy/LegacyShareModal'; import { NEODASH_VERSION } from '../DashboardReducer'; @@ -67,6 +68,7 @@ enum Modal { LOAD = 7, SAVE = 8, NONE = 9, + ACCESS = 10, } // We use "index = -1" to represent a non-saved draft dashboard in the sidebar's dashboard list. @@ -256,6 +258,16 @@ export const NeoDashboardSidebar = ({ }} /> + { + setModalOpen(Modal.NONE); + setCachedDashboard(''); + }} + /> + { + setMenuOpen(Menu.NONE); + setModalOpen(Modal.ACCESS); + }} handleDeleteClicked={() => { setMenuOpen(Menu.NONE); setModalOpen(Modal.DELETE); diff --git a/src/dashboard/sidebar/menu/DashboardSidebarDashboardMenu.tsx b/src/dashboard/sidebar/menu/DashboardSidebarDashboardMenu.tsx index 67159dcc2..eea79efb4 100644 --- a/src/dashboard/sidebar/menu/DashboardSidebarDashboardMenu.tsx +++ b/src/dashboard/sidebar/menu/DashboardSidebarDashboardMenu.tsx @@ -8,6 +8,7 @@ import { DocumentTextIconOutline, InformationCircleIconOutline, ShareIconOutline, + FingerPrintIconOutline, TrashIconOutline, XMarkIconOutline, } from '@neo4j-ndl/react/icons'; @@ -25,6 +26,7 @@ export const NeoDashboardSidebarDashboardMenu = ({ handleLoadClicked, handleExportClicked, handleShareClicked, + handleAccessClicked, handleDeleteClicked, handleClose, }) => { @@ -49,6 +51,7 @@ export const NeoDashboardSidebarDashboardMenu = ({ } title='Load' /> {/* {}} icon={} title='Clone' /> */} } title='Export' /> + } title='Access' /> } title='Share' /> } title='Delete' /> diff --git a/src/dashboard/sidebar/modal/DashboardSidebarAccessModal.tsx b/src/dashboard/sidebar/modal/DashboardSidebarAccessModal.tsx new file mode 100644 index 000000000..0cb320b65 --- /dev/null +++ b/src/dashboard/sidebar/modal/DashboardSidebarAccessModal.tsx @@ -0,0 +1,215 @@ +import React, { useEffect, useState, useContext } from 'react'; +import { IconButton, Button, Dialog, TextInput } from '@neo4j-ndl/react'; +import { Menu, MenuItem, Chip } from '@mui/material'; +import { Neo4jContext, Neo4jContextState } from 'use-neo4j/dist/neo4j.context'; +import { PlusCircleIconOutline } from '@neo4j-ndl/react/icons'; +import { QueryStatus, runCypherQuery } from '../../../report/ReportQueryRunner'; +import { createNotificationThunk } from '../../../page/PageThunks'; +import { useDispatch } from 'react-redux'; +/** + * Configures setting the current Neo4j database connection for the dashboard. + * @param open - Whether the modal is open or not. + * @param database - The current Neo4j database. + * @param dashboard - The current dashboard. + * @param handleClose - The function to close the modal. + */ +export const NeoDashboardSidebarAccessModal = ({ open, database, dashboard, handleClose }) => { + const [anchorEl, setAnchorEl] = useState(null); + const [selectedLabels, setSelectedLabels] = useState([]); + const [allLabels, setAllLabels] = useState([]); + const [neo4jLabels, setNeo4jLabels] = useState([]); + const [newLabel, setNewLabel] = useState(''); + const INITIAL_LABEL = '_Neodash_Dashboard'; + const [feedback, setFeedback] = useState(''); + const { driver } = useContext(Neo4jContext); + const dispatch = useDispatch(); + + useEffect(() => { + if (!open) { + return; + } + runCypherQuery( + driver, + database, + 'CALL db.labels()', + {}, + 1000, + () => {}, + (records) => setNeo4jLabels(records.map((record) => record.get('label'))) + ); + + const query = ` + MATCH (d:${INITIAL_LABEL} {uuid: "${dashboard.uuid}"}) + RETURN labels(d) as labels + `; + runCypherQuery( + driver, + database, + query, + {}, + 1000, + (error) => { + console.error(error); + }, + (records) => { + // Set the selectedLabels state to the labels of the dashboard + setSelectedLabels(records[0].get('labels')); + setAllLabels(records[0].get('labels')); + } + ); + setFeedback(''); + setNewLabel(''); + }, [open]); + + useEffect(() => { + setAllLabels([INITIAL_LABEL]); + setSelectedLabels([INITIAL_LABEL]); + }, []); + + const handleOpenMenu = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleCloseMenu = () => { + setAnchorEl(null); + }; + + const handleLabelSelect = (label) => { + if (!selectedLabels.includes(label) && label !== INITIAL_LABEL) { + setSelectedLabels([...selectedLabels, label]); + } + handleCloseMenu(); + }; + + const handleDeleteLabel = (label) => { + if (label !== INITIAL_LABEL) { + const updatedLabels = selectedLabels.filter((selectedLabel) => selectedLabel !== label); + setSelectedLabels(updatedLabels); + } + }; + + const handleAddNewLabel = (e) => { + if (e.key === 'Enter' && newLabel.trim() !== '') { + if (selectedLabels.includes(newLabel)) { + setFeedback('Label already exists. Please enter a unique label.'); + handleCloseMenu(); + } else { + setSelectedLabels([...selectedLabels, newLabel]); + handleLabelSelect(newLabel); + setNewLabel(''); + handleCloseMenu(); + setFeedback(''); + } + } + }; + + const handleSave = () => { + // Finding the difference between what is stored and what has been selected in the UI + let toDelete = allLabels.filter((item) => selectedLabels.indexOf(item) < 0); + + const query = ` + MATCH (d:${INITIAL_LABEL} {uuid: "${dashboard.uuid}"}) + SET d:${selectedLabels.join(':')} + ${toDelete.length > 0 ? `REMOVE d:${toDelete.join(':')}` : ''} + RETURN 1; + `; + + runCypherQuery( + driver, + database, + query, + { selectedLabels: selectedLabels }, + 1000, + (status) => { + if (status == QueryStatus.COMPLETE) { + dispatch( + createNotificationThunk( + '🎉 Success!', + 'Selected Labels have successfully been added to the dashboard node.' + ) + ); + handleClose(); + } else { + dispatch( + createNotificationThunk( + 'Unable to save dashboard', + `Do you have write access to the '${database}' database?` + ) + ); + } + }, + () => {} + ); + }; + + return ( + + Dasboard Access Control - '{dashboard?.title}' + + Welcome to the Dashboard Access settings! +
    + In this modal, you can select the labels that you want to add to the current dashboard node. +
    + For more information, please refer to the{' '} +
    + documentation + + . + +
    + + {/* Fetch labels dynamically from Neo4j and map to menu items */} + {neo4jLabels + .filter((e) => !selectedLabels.includes(e)) + .map((label) => ( + handleLabelSelect(label)}> + {label} + + ))} + + setNewLabel(e.target.value)} + onKeyDown={(e: KeyboardEvent) => { + handleAddNewLabel(e); + e.stopPropagation(); + }} + errorText={feedback} + placeholder='Create New label' + autoComplete='off' + /> + + +
    + {selectedLabels.map((label) => ( + handleDeleteLabel(label)} + style={{ marginRight: '5px', marginBottom: '5px' }} + /> + ))} + + + +
    +
    + + + + + + ); +}; + +export default NeoDashboardSidebarAccessModal; diff --git a/src/extensions/ExtensionConfig.tsx b/src/extensions/ExtensionConfig.tsx index a94053d2e..2ddfc0620 100644 --- a/src/extensions/ExtensionConfig.tsx +++ b/src/extensions/ExtensionConfig.tsx @@ -5,6 +5,7 @@ import NeoOverrideCardQueryEditor from './text2cypher/component/OverrideCardQuer import { translateQuery } from './text2cypher/util/Util'; import { GPT_LOADING_ICON } from './text2cypher/component/LoadingIcon'; import QueryTranslatorButton from './text2cypher/component/QueryTranslatorButton'; +import RBACManagementLabelButton from './rbac/RBACManagementLabelButton'; // TODO: continue documenting interface interface Extension { @@ -82,6 +83,17 @@ export const EXTENSIONS: Record = { 'Forms let you craft Cypher queries with multiple inputs, that are fired on demand. Using parameters from the dashboard, or form specific input, you will be able to trigger custom logic with forms.', link: 'https://neo4j.com/professional-services/', }, + 'access-control-management': { + name: 'access-control-management', + label: 'Access Control Management', + author: 'Neo4j Professional Services', + image: 'accesscontrol2.jpg', + enabled: true, + description: + 'This extension lets you manage access control, letting you assign users to roles, as well as controlling which node labels can be read by a user.', + link: 'https://neo4j.com/professional-services/', + settingsMenuButton: RBACManagementLabelButton, + }, }; /** diff --git a/src/extensions/rbac/RBACManagementLabelButton.tsx b/src/extensions/rbac/RBACManagementLabelButton.tsx new file mode 100644 index 000000000..80bf9e19e --- /dev/null +++ b/src/extensions/rbac/RBACManagementLabelButton.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { IconButton, MenuItem } from '@neo4j-ndl/react'; +import { UserCircleIconOutline } from '@neo4j-ndl/react/icons'; +import { RBACManagementMenu } from './RBACManagementMenu'; + +import Tooltip from '@mui/material/Tooltip/Tooltip'; +import { createNotificationThunk } from '../../page/PageThunks'; + +const RBACManagementLabelButton = ({ createNotification }) => { + const [MenuOpen, setMenuOpen] = React.useState(false); + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleButtonClick = (event) => { + setMenuOpen(true); + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setMenuOpen(false); + }; + + const button = ( + + + + + + ); + + return ( +
    + {button} + +
    + ); +}; + +const mapStateToProps = () => ({}); + +const mapDispatchToProps = (dispatch) => ({ + createNotification: (title: any, message: any) => { + dispatch(createNotificationThunk(title, message)); + }, +}); + +export default connect(mapStateToProps, mapDispatchToProps)(RBACManagementLabelButton); diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx new file mode 100644 index 000000000..264f84643 --- /dev/null +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -0,0 +1,85 @@ +import React, { useEffect, useState, useContext } from 'react'; +import { Menu, MenuItem, MenuItems } from '@neo4j-ndl/react'; +import { UserIconOutline } from '@neo4j-ndl/react/icons'; +import { Neo4jContext, Neo4jContextState } from 'use-neo4j/dist/neo4j.context'; +import { QueryStatus, runCypherQuery } from '../../report/ReportQueryRunner'; +import RBACManagementModal from './RBACManagementModal'; + +/** + * Component for providing a menu of all the roles in the neo4j database to the user whenever they press on the + * RBACManagementLabelButton. + */ +export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNotification }) => { + const { driver } = useContext(Neo4jContext); + const [roles, setRoles] = useState([]); + const [selectedRole, setSelectedRole] = useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + + useEffect(() => { + if (!MenuOpen) { + return; + } + const query = `SHOW ROLES YIELD role WHERE role <> "PUBLIC" return role`; + runCypherQuery( + driver, + 'system', + query, + {}, + 1000, + () => {}, + (records) => { + if (records[0].error) { + createNotification('Unable to retrieve roles', records[0].error); + return; + } + setRoles(records.map((record) => record._fields[0])); + } + ); + }, [MenuOpen]); + + if (roles.length == 0) { + return <>; + } + + const handleRoleClicked = (role) => { + handleClose(); + setSelectedRole(role); + setIsModalOpen(true); + }; + + return ( + <> + + + {roles.map((role) => ( + handleRoleClicked(role)} icon={} title={role} /> + ))} + + + + { + setIsModalOpen(false); + }} + currentRole={selectedRole} + createNotification={createNotification} + /> + + ); +}; + +export default RBACManagementMenu; diff --git a/src/extensions/rbac/RBACManagementModal.tsx b/src/extensions/rbac/RBACManagementModal.tsx new file mode 100644 index 000000000..c19f5ea21 --- /dev/null +++ b/src/extensions/rbac/RBACManagementModal.tsx @@ -0,0 +1,179 @@ +import React, { useEffect, useState, useContext } from 'react'; +import { Button, Dialog, Dropdown } from '@neo4j-ndl/react'; +import { Neo4jContext, Neo4jContextState } from 'use-neo4j/dist/neo4j.context'; +import { + Operation, + retrieveAllowAndDenyLists, + retrieveDatabaseList, + retrieveLabelsList, + retrieveNeo4jUsers, + updatePrivileges, + updateUsers, +} from './RBACUtils'; +/** + * Configures RBAC Access Control Management for a certain role on certain labels and attaches the roles to specific users. + * @param open - Whether the modal is open or not. + * @param currentRole - The currently selected role. + * @param handleClose - The function to close the modal. + */ +export const RBACManagementModal = ({ open, handleClose, currentRole, createNotification }) => { + const { driver } = useContext(Neo4jContext); + const [neo4jUsers, setNeo4jUsers] = useState([]); + const [selectedUsers, setSelectedUsers] = useState([]); + const [selectedDatabase, setSelectedDatabase] = useState(''); + const [databases, setDatabases] = useState([]); + const [loaded, setLoaded] = useState(false); + const [labels, setLabels] = useState([]); + const [allowList, setAllowList] = useState([]); + const [denyList, setDenyList] = useState([]); + + useEffect(() => { + if (!open) { + setSelectedUsers([]); + setAllowList([]); + setDenyList([]); + setSelectedDatabase(''); + return; + } + retrieveDatabaseList(driver, setDatabases); + retrieveNeo4jUsers(driver, currentRole, setNeo4jUsers, setSelectedUsers); + }, [open]); + + const parseLabelsList = (database, records) => { + const allLabels = records.map((record) => record._fields[0]).filter((l) => l !== '_Neodash_Dashboard'); + retrieveAllowAndDenyLists( + driver, + database, + currentRole, + allLabels, + setLabels, + setAllowList, + setDenyList, + setLoaded + ); + }; + + const handleDatabaseSelect = (selectedOption) => { + setSelectedDatabase(selectedOption.value); + retrieveLabelsList(driver, selectedOption.value, (records) => parseLabelsList(selectedOption.value, records)); + }; + + const handleSave = () => { + updateUsers(driver, currentRole, neo4jUsers, selectedUsers); + if (selectedDatabase) { + createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); + updatePrivileges(driver, selectedDatabase, currentRole, labels, denyList, Operation.DENY, createNotification); + updatePrivileges(driver, selectedDatabase, currentRole, labels, allowList, Operation.GRANT, createNotification); + } else { + createNotification('Success', `Users have been updated for role '${currentRole}'.`); + } + + handleClose(); + }; + + return ( + + Access Control - '{currentRole}' + + This screen lets you handle user assignment and access control for a specific role. +
    + For more information, please refer to the{' '} + + documentation + + . +
    +
    +
    +
    Manage Users
    +

    Select a list of users to assign to the current role.

    + ({ value: user, label: user })), + options: neo4jUsers.map((user) => ({ value: user, label: user })), + isMulti: true, + onChange: (val) => setSelectedUsers(val.map((v) => v.value)), + }} + /> +
    +
    +
    +
    Label Access
    +

    For a given database, control what labels the role is or is not allowed to see.

    + database !== 'system') + .map((database) => ({ value: database, label: database })), + onChange: handleDatabaseSelect, + }} + /> +
    + {selectedDatabase && loaded && ( + <> +
    +
    +
    + i == '*') && + 'Selecting (*) grants access to all labels, overriding other selections.' + } + selectProps={{ + placeholder: 'Select labels', + isClearable: false, + value: allowList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + isMulti: true, + onChange: (val) => setAllowList(val.map((v) => v.value)), + }} + /> +
    +
    + i == '*') && + 'Selecting (*) denies access to all labels, overriding other selections.' + } + selectProps={{ + placeholder: 'Select labels', + isClearable: false, + value: denyList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + isMulti: true, + onChange: (val) => setDenyList(val.map((v) => v.value)), + }} + /> +
    +
    + + )} +
    + + + + +
    + ); +}; + +export default RBACManagementModal; diff --git a/src/extensions/rbac/RBACUtils.ts b/src/extensions/rbac/RBACUtils.ts new file mode 100644 index 000000000..0ed54781b --- /dev/null +++ b/src/extensions/rbac/RBACUtils.ts @@ -0,0 +1,250 @@ +import { QueryStatus, runCypherQuery } from '../../report/ReportQueryRunner'; + +export enum Operation { + GRANT, + DENY, +} + +/** + * Sets the privileges for a role to a new list provided by the user. + * This involves wiping old privileges, including a special case for '*' privileges. + * @param driver the Neo4j driver. + * @param database a database name for which Privileges must be changed. + * @param role role for which privileges are updated. + * @param allLabels list of all labels in the given database. + * @param newLabels list of new labels in the database, for which priveleges are changed. + * @param operation The operation, either 'GRANT' or 'DENY' + */ +export const updatePrivileges = ( + driver, + database, + role, + allLabels, + newLabels, + operation: Operation, + createNotification +) => { + // TODO - should we also drop cross-database DENYs (`ON GRAPH *`) to catch the true full set? + // TODO - there + // 1. Special case for '*'. Create it if needed to be there, otherwise revoke it. + runCypherQuery( + driver, + 'system', + buildAccessQuery(database, role, ['*'], operation, !newLabels.includes('*')), + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + // 2. Build the query that revokes all possible priveleges, returning to a 'blank slate' + runCypherQuery( + driver, + 'system', + buildAccessQuery( + database, + role, + allLabels.filter((l) => l !== '*'), + operation, + true + ), + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. + // We build in an artificial delay... + const timeout = setTimeout(() => { + // 3. Create the new privileges as specified in the `newLabels` list by the user. + if (newLabels.filter((l) => l !== '*').length > 0) { + runCypherQuery( + driver, + 'system', + buildAccessQuery( + database, + role, + newLabels.filter((l) => l !== '*'), + operation, + false + ), + {}, + 1000, + () => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + createNotification('Success', `Access for role '${role}' updated.`); + } + } + ); + } + }, 1000); + } + } + ); + } + } + ); +}; + +/** + * Generic query builder for adding/removing grants/denies for a list of labels. + * @param database the database to grant/deny on. + * @param role the role to create access rules for. + * @param labels a list of node labels + * @param access the access type. Can be "GRANT" or "DENY" + * @param revoke Whether to revoke access or not. + * @returns + */ +function buildAccessQuery(database, role, labels, operation: Operation, revoke: boolean): string { + const query = `${revoke ? 'REVOKE' : ''} + ${operation == Operation.DENY ? 'DENY' : 'GRANT'} + MATCH {*} ON GRAPH ${database} + NODES ${labels.join(',')} + ${revoke ? 'FROM' : 'TO'} ${role}`; + return query; +} + +/** + * Retrieve allow and deny lists for a selected role, and a given database. + * @param driver Neo4j driver object. + * @param database the user's selected database. + * @param currentRole the user's selected role. + * @param allLabels list of all labels in the database (retrieved seperately) + * @param setLabels callback to update the list of all labels with any more that may only exist in priveleges + * @param setAllowList callback to update the allow list retrieved from the database. + * @param setDenyList callback to update the deny list retrieved from the database. + * @param setLoaded callback to indicate the retrieval is completed. + */ +export const retrieveAllowAndDenyLists = ( + driver, + database, + currentRole, + allLabels, + setLabels, + setAllowList, + setDenyList, + setLoaded +) => { + runCypherQuery( + driver, + 'system', + `SHOW PRIVILEGES + YIELD graph, role, access, action, segment + WHERE (graph = $database OR graph = '*') + AND role = $rolename + AND action = 'match' + AND segment STARTS WITH 'NODE(' + RETURN access, collect(substring(segment, 5, size(segment)-6)) as nodes`, + { rolename: currentRole, database: database }, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA) { + setLabels(['*'].concat(allLabels)); + setLoaded(true); + } + }, + (records) => { + // Extract granted and denied label list from the result of the SHOW PRIVILEGES query + const grants = records.filter((r) => r._fields[0] == 'GRANTED'); + const denies = records.filter((r) => r._fields[0] == 'DENIED'); + const grantedLabels = grants[0] ? [...new Set(grants[0]._fields[1])] : []; + const deniedLabels = denies[0] ? [...new Set(denies[0]._fields[1])] : []; + setAllowList(grantedLabels); + setDenyList(deniedLabels); + + // Here we build a set of all POSSIBLE labels, that includes the list in the database, plus those in denies and grants. + const possibleLabels = [...new Set(allLabels.concat(grantedLabels).concat(deniedLabels))]; + // Add '*' as an extra option. + setLabels(['*'].concat(possibleLabels)); + setLoaded(true); + } + ); +}; + +/** + * Retrieve the set of all users from the database. + * @param driver Neo4j driver object with active session. + * @param currentRole selected role. + * @param setNeo4jUsers callback to update the list of all users. + * @param setRoleUsers callback to update the list of role-specific users. + */ +export const retrieveNeo4jUsers = (driver, currentRole, setNeo4jUsers, setRoleUsers) => { + runCypherQuery( + driver, + 'system', + 'SHOW users yield user, roles return user, roles', + {}, + 1000, + () => {}, + (records) => { + const roleRecords = records.filter((r) => r._fields[1].includes(currentRole)); + setRoleUsers(roleRecords.map((record) => record._fields[0])); + setNeo4jUsers(records.map((record) => record._fields[0])); + } + ); +}; + +/** + * retrieve the list of labels in a given database from the dbms. + * @param driver Neo4j driver object. + * @param database selected database. + * @param setLabels callback to update the list of labels. + */ +export function retrieveLabelsList(driver, database: any, setLabels: (records: any) => void) { + runCypherQuery( + driver, + database.value, + 'CALL db.labels()', + {}, + 1000, + () => {}, + (records) => setLabels(records) + ); +} + +/** + * retrieve the list of databases in a DBMS. + * @param driver Neo4j driver with active session + * @param setDatabases callback to update the list of databases. + */ +export function retrieveDatabaseList(driver, setDatabases: React.Dispatch>) { + runCypherQuery( + driver, + 'system', + 'SHOW DATABASES yield name return distinct name', + {}, + 1000, + () => {}, + (records) => { + setDatabases(records.map((record) => record._fields[0])); + } + ); +} + +/** + * Updates the list of users for a given role. + * This is a two step operation: clear the users assigned to the role currently, and recreate them with a new list. + * @param driver Neo4j driver with active session. + * @param currentRole selected role + * @param allUsers list of all users. + * @param selectedUsers list of users to have the role after the operation completes. + */ +export const updateUsers = async (driver, currentRole, allUsers, selectedUsers) => { + // 1. Build the query that removes all users from the role. + await runCypherQuery( + driver, + 'system', + `REVOKE ROLE ${currentRole} FROM ${allUsers.join(',')}`, + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. + // We build in an artificial delay... + const timeout = setTimeout(() => { + // 2. Re-assign only selected users to the role. + if (selectedUsers.length > 0) { + runCypherQuery(driver, 'system', `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`); + } + }, 1000); + } + } + ); +}; From 19401a3c8fc395e87ce90cbe5cb7f0611ed9cdff Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:30:51 +0100 Subject: [PATCH 022/120] adding migration for report action fix (#800) * adding migration for report action fix * improving code following sonarcloud suggestions * reverting version number and implemented patching function --------- Co-authored-by: Alfred Rubin --- src/dashboard/DashboardReducer.ts | 8 +++++- src/dashboard/DashboardThunks.ts | 47 +++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/dashboard/DashboardReducer.ts b/src/dashboard/DashboardReducer.ts index c4bd865b8..b2a16c35e 100644 --- a/src/dashboard/DashboardReducer.ts +++ b/src/dashboard/DashboardReducer.ts @@ -19,7 +19,13 @@ import { } from './DashboardActions'; export const NEODASH_VERSION = '2.4'; -export const VERSION_TO_MIGRATE = { '1.1': '2.0', '2.0': '2.1', '2.1': '2.2', '2.2': '2.3', '2.3': '2.4' }; +export const VERSION_TO_MIGRATE = { + '1.1': '2.0', + '2.0': '2.1', + '2.1': '2.2', + '2.2': '2.3', + '2.3': '2.4', +}; export const initialState = { title: DEFAULT_DASHBOARD_TITLE, diff --git a/src/dashboard/DashboardThunks.ts b/src/dashboard/DashboardThunks.ts index aa563d444..c1fcd0b4e 100644 --- a/src/dashboard/DashboardThunks.ts +++ b/src/dashboard/DashboardThunks.ts @@ -80,6 +80,17 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any) dashboard = dashboard.dashboard; } + let patched; + [dashboard, patched] = patchDashboardVersion(dashboard, dashboard.version); + if (patched) { + dispatch( + createNotificationThunk( + 'Successfully patched dashboard', + `Your old dashboard has been patched. You might need to refresh this page and reactivate extensions.` + ) + ); + } + // Attempt upgrade if dashboard version is outdated. while (VERSION_TO_MIGRATE[dashboard.version]) { const upgradedDashboard = upgradeDashboardVersion( @@ -540,6 +551,29 @@ export const assignDashboardUuidIfNotPresentThunk = () => (dispatch: any, getSta dispatch(setDashboardUuid(createUUID())); } }; +export function patchDashboardVersion(dashboard: any, version: any) { + let patched = false; + if (version == '2.4') { + dashboard.pages.forEach((p) => { + p.reports.forEach((r) => { + if (r.type == 'graph' || r.type == 'map' || r.type == 'graph3d') { + r.settings?.actionsRules.forEach((rule) => { + if ( + rule?.field && + (rule?.condition === 'onNodeClick' || rule?.condition == 'Click') && + rule.value.includes('.') + ) { + let val = rule.value.split('.'); + rule.value = val[val.length - 1] || rule.value; + patched = true; + } + }); + } + }); + }); + } + return [dashboard, patched]; +} export function upgradeDashboardVersion(dashboard: any, origin: string, target: string) { if (origin == '2.3' && target == '2.4') { @@ -549,6 +583,19 @@ export function upgradeDashboardVersion(dashboard: any, origin: string, target: r.y *= 2; r.width *= 2; r.height *= 2; + + if (r.type == 'graph' || r.type == 'map' || r.type == 'graph3d') { + r.settings?.actionsRules.forEach((rule) => { + if ( + rule?.field && + (rule?.condition === 'onNodeClick' || rule?.condition == 'Click') && + rule.value.includes('.') + ) { + let val = rule.value.split('.'); + rule.value = val[val.length - 1] || rule.value; + } + }); + } }); }); dashboard.version = '2.4'; From f700e57a0ccb9b67d225034937a34c255bd497df Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 28 Feb 2024 16:20:49 +0100 Subject: [PATCH 023/120] fixing forEach on null variable (#801) Co-authored-by: Alfred Rubin --- src/dashboard/DashboardThunks.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dashboard/DashboardThunks.ts b/src/dashboard/DashboardThunks.ts index c1fcd0b4e..2ab54e614 100644 --- a/src/dashboard/DashboardThunks.ts +++ b/src/dashboard/DashboardThunks.ts @@ -557,7 +557,7 @@ export function patchDashboardVersion(dashboard: any, version: any) { dashboard.pages.forEach((p) => { p.reports.forEach((r) => { if (r.type == 'graph' || r.type == 'map' || r.type == 'graph3d') { - r.settings?.actionsRules.forEach((rule) => { + r.settings?.actionsRules?.forEach((rule) => { if ( rule?.field && (rule?.condition === 'onNodeClick' || rule?.condition == 'Click') && @@ -585,7 +585,7 @@ export function upgradeDashboardVersion(dashboard: any, origin: string, target: r.height *= 2; if (r.type == 'graph' || r.type == 'map' || r.type == 'graph3d') { - r.settings?.actionsRules.forEach((rule) => { + r.settings?.actionsRules?.forEach((rule) => { if ( rule?.field && (rule?.condition === 'onNodeClick' || rule?.condition == 'Click') && From 291e9cddb69c0eef50fdc53f4e1a62b03a440bec Mon Sep 17 00:00:00 2001 From: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:33:24 +0530 Subject: [PATCH 024/120] fix: in report config bar chart had duplicate settings --- src/config/ReportConfig.tsx | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/src/config/ReportConfig.tsx b/src/config/ReportConfig.tsx index e9270c314..0a5845764 100644 --- a/src/config/ReportConfig.tsx +++ b/src/config/ReportConfig.tsx @@ -415,28 +415,6 @@ const _REPORT_TYPES = { type: SELECTION_TYPES.NUMBER, default: 0.25, }, - expandHeightForLegend: { - label: 'Expand Height For Legend', - type: SELECTION_TYPES.LIST, - values: [true, false], - default: false, - }, - innerPadding: { - label: 'Inner Padding', - type: SELECTION_TYPES.NUMBER, - default: 0, - }, - legendPosition: { - label: 'Legend Position', - type: SELECTION_TYPES.LIST, - values: ['Horizontal', 'Vertical'], - default: 'Vertical', - }, - padding: { - label: 'Padding', - type: SELECTION_TYPES.NUMBER, - default: 0.25, - }, }, }, pie: { From 4eb92856dd947bc5b768d17bf1a44eab99f2148a Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 29 Feb 2024 18:06:04 +0100 Subject: [PATCH 025/120] fixing gantt chart, new driver version was returning {low,high} numbers --- src/extensions/advancedcharts/chart/gantt/Utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 012c77201..331be20ff 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,3 +1,4 @@ +import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -97,9 +98,9 @@ export function createTasksList( return undefined; } } - return { - start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), - end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), + let res = { + start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), + end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -112,6 +113,7 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; + return res; }) .filter((i) => i !== undefined); } From f417f57ae7c3bc7e4695e13168be75fd6250551d Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 29 Feb 2024 18:13:57 +0100 Subject: [PATCH 026/120] Revert "fixing gantt chart, new driver version was returning {low,high} numbers" This reverts commit 4eb92856dd947bc5b768d17bf1a44eab99f2148a. --- src/extensions/advancedcharts/chart/gantt/Utils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 331be20ff..012c77201 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,4 +1,3 @@ -import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -98,9 +97,9 @@ export function createTasksList( return undefined; } } - let res = { - start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), - end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), + return { + start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), + end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -113,7 +112,6 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; - return res; }) .filter((i) => i !== undefined); } From 825b1e95d2af417c95c2e19b87d04a09a9de95bd Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 29 Feb 2024 18:15:01 +0100 Subject: [PATCH 027/120] fixing gantt chart, new driver version was returning {low,high} numbers --- src/extensions/advancedcharts/chart/gantt/Utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 012c77201..331be20ff 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,3 +1,4 @@ +import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -97,9 +98,9 @@ export function createTasksList( return undefined; } } - return { - start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), - end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), + let res = { + start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), + end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -112,6 +113,7 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; + return res; }) .filter((i) => i !== undefined); } From 87c1215082199a36498921b78f9c0d90b00d8237 Mon Sep 17 00:00:00 2001 From: Bennu Date: Fri, 1 Mar 2024 09:37:17 +0100 Subject: [PATCH 028/120] Fix number conversion --- src/extensions/advancedcharts/chart/radar/RadarChart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx index 4fec1e6d0..29fdd607f 100644 --- a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx +++ b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx @@ -67,7 +67,7 @@ const NeoRadarChart = (props: ChartProps) => { const entry = {}; selection.values.concat([selection.index]).forEach((k) => { const fieldIndex = r._fieldLookup[k]; - if (k !== selection.index && isNaN(r._fields[fieldIndex])) { + if (k !== selection.index && Number.isNaN(r._fields[fieldIndex])) { valid = false; } entry[k] = `${r._fields[fieldIndex]}`; From 3ad44c4894c33b4d500e1f37ab705dfff6be83e5 Mon Sep 17 00:00:00 2001 From: Bennu Date: Fri, 1 Mar 2024 10:02:41 +0100 Subject: [PATCH 029/120] Some NaNs --- src/chart/parameter/component/DateParameterSelect.tsx | 2 +- src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx | 2 +- src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/chart/parameter/component/DateParameterSelect.tsx b/src/chart/parameter/component/DateParameterSelect.tsx index 25d2e0f65..0046e737c 100644 --- a/src/chart/parameter/component/DateParameterSelect.tsx +++ b/src/chart/parameter/component/DateParameterSelect.tsx @@ -55,7 +55,7 @@ const DatePickerParameterSelectComponent = (props: ParameterSelectProps) => { setInputDate(newValue); // Check whether the user has inputted a valid year. If not, do not update the parameter. - if (!newValue || isNaN(newValue.$y) || isNaN(newValue.$m) || isNaN(newValue.$d)) { + if (!newValue || Number.isNaN(newValue.$y) || Number.isNaN(newValue.$m) || Number.isNaN(newValue.$d)) { return; } if (newValue == null && clearParameterOnFieldClear) { diff --git a/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx b/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx index 443628dcb..4471871eb 100644 --- a/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx +++ b/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx @@ -42,7 +42,7 @@ const NeoGaugeChart = (props: ChartProps) => { const chartId = createUUID(); let score = records && records[0] && records[0]._fields && records[0]._fields[0] ? records[0]._fields[0] : ''; - if (isNaN(score)) { + if (Number.isNaN(score)) { return ; } if (score.low != undefined) { diff --git a/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx b/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx index cb333ba50..a60c8b514 100644 --- a/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx +++ b/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx @@ -86,7 +86,7 @@ const NeoSankeyChart = (props: ChartProps) => { properties: value.properties, value: 1, }); - } else if (value.properties[labelProperty] !== undefined && !isNaN(value.properties[labelProperty])) { + } else if (value.properties[labelProperty] !== undefined && !Number.isNaN(value.properties[labelProperty])) { addItem(links[`${value.start.low},${value.end.low}`], { id: value.identity.low, source: value.start.low, From b3e6a639fd35e9017b6d4c8c2e701190a740c2ea Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 29 Feb 2024 18:06:04 +0100 Subject: [PATCH 030/120] fixing gantt chart, new driver version was returning {low,high} numbers --- src/extensions/advancedcharts/chart/gantt/Utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 012c77201..331be20ff 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,3 +1,4 @@ +import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -97,9 +98,9 @@ export function createTasksList( return undefined; } } - return { - start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), - end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), + let res = { + start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), + end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -112,6 +113,7 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; + return res; }) .filter((i) => i !== undefined); } From c015b8752d400f8d23b878243c7c06deaf6151e1 Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 29 Feb 2024 18:13:57 +0100 Subject: [PATCH 031/120] Revert "fixing gantt chart, new driver version was returning {low,high} numbers" This reverts commit 4eb92856dd947bc5b768d17bf1a44eab99f2148a. --- src/extensions/advancedcharts/chart/gantt/Utils.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 331be20ff..012c77201 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,4 +1,3 @@ -import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -98,9 +97,9 @@ export function createTasksList( return undefined; } } - let res = { - start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), - end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), + return { + start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), + end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -113,7 +112,6 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; - return res; }) .filter((i) => i !== undefined); } From 8ba409477aa6d6f7af1a5d9a0a41c9348270ea72 Mon Sep 17 00:00:00 2001 From: Harold Agudelo Date: Fri, 1 Mar 2024 10:27:47 +0100 Subject: [PATCH 032/120] Revert "Fix Radar number NaN High-Low" --- src/chart/parameter/component/DateParameterSelect.tsx | 2 +- src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx | 2 +- src/extensions/advancedcharts/chart/radar/RadarChart.tsx | 2 +- src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/chart/parameter/component/DateParameterSelect.tsx b/src/chart/parameter/component/DateParameterSelect.tsx index 0046e737c..25d2e0f65 100644 --- a/src/chart/parameter/component/DateParameterSelect.tsx +++ b/src/chart/parameter/component/DateParameterSelect.tsx @@ -55,7 +55,7 @@ const DatePickerParameterSelectComponent = (props: ParameterSelectProps) => { setInputDate(newValue); // Check whether the user has inputted a valid year. If not, do not update the parameter. - if (!newValue || Number.isNaN(newValue.$y) || Number.isNaN(newValue.$m) || Number.isNaN(newValue.$d)) { + if (!newValue || isNaN(newValue.$y) || isNaN(newValue.$m) || isNaN(newValue.$d)) { return; } if (newValue == null && clearParameterOnFieldClear) { diff --git a/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx b/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx index 4471871eb..443628dcb 100644 --- a/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx +++ b/src/extensions/advancedcharts/chart/gauge/GaugeChart.tsx @@ -42,7 +42,7 @@ const NeoGaugeChart = (props: ChartProps) => { const chartId = createUUID(); let score = records && records[0] && records[0]._fields && records[0]._fields[0] ? records[0]._fields[0] : ''; - if (Number.isNaN(score)) { + if (isNaN(score)) { return ; } if (score.low != undefined) { diff --git a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx index 29fdd607f..4fec1e6d0 100644 --- a/src/extensions/advancedcharts/chart/radar/RadarChart.tsx +++ b/src/extensions/advancedcharts/chart/radar/RadarChart.tsx @@ -67,7 +67,7 @@ const NeoRadarChart = (props: ChartProps) => { const entry = {}; selection.values.concat([selection.index]).forEach((k) => { const fieldIndex = r._fieldLookup[k]; - if (k !== selection.index && Number.isNaN(r._fields[fieldIndex])) { + if (k !== selection.index && isNaN(r._fields[fieldIndex])) { valid = false; } entry[k] = `${r._fields[fieldIndex]}`; diff --git a/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx b/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx index a60c8b514..cb333ba50 100644 --- a/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx +++ b/src/extensions/advancedcharts/chart/sankey/SankeyChart.tsx @@ -86,7 +86,7 @@ const NeoSankeyChart = (props: ChartProps) => { properties: value.properties, value: 1, }); - } else if (value.properties[labelProperty] !== undefined && !Number.isNaN(value.properties[labelProperty])) { + } else if (value.properties[labelProperty] !== undefined && !isNaN(value.properties[labelProperty])) { addItem(links[`${value.start.low},${value.end.low}`], { id: value.identity.low, source: value.start.low, From a81b98036adc203c6652d3f52e30f04474f770c8 Mon Sep 17 00:00:00 2001 From: Bennu Date: Fri, 1 Mar 2024 11:11:17 +0100 Subject: [PATCH 033/120] NaNs --- src/chart/graph/util/RecordUtils.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/chart/graph/util/RecordUtils.ts b/src/chart/graph/util/RecordUtils.ts index f432e6596..b8d853d33 100644 --- a/src/chart/graph/util/RecordUtils.ts +++ b/src/chart/graph/util/RecordUtils.ts @@ -1,6 +1,6 @@ import { evaluateRulesOnNode, evaluateRulesOnLink } from '../../../extensions/styling/StyleRuleEvaluator'; import { extractNodePropertiesFromRecords, mergeNodePropsFieldsLists } from '../../../report/ReportRecordProcessing'; -import { valueIsArray, valueIsNode, valueIsRelationship, valueIsPath } from '../../ChartUtils'; +import { valueIsArray, valueIsNode, valueIsRelationship, valueIsPath, toNumber } from '../../ChartUtils'; import { GraphChartVisualizationProps } from '../GraphChartVisualization'; import { assignCurvatureToLink } from './RelUtils'; import { isNode } from 'neo4j-driver-core/lib/graph-types.js'; @@ -49,7 +49,9 @@ function extractGraphEntitiesFromField( nodes[value.identity.low] = { id: value.identity.low, labels: value.labels, - size: value.properties[nodeSizeProperty] ? value.properties[nodeSizeProperty] : defaultNodeSize, + size: !Number.isNaN(value.properties[nodeSizeProperty]) + ? toNumber(value.properties[nodeSizeProperty]) + : defaultNodeSize, properties: value.properties, mainLabel: value.labels[value.labels.length - 1], }; @@ -67,7 +69,9 @@ function extractGraphEntitiesFromField( source: value.start.low, target: value.end.low, type: value.type, - width: value.properties[relWidthProperty] ? value.properties[relWidthProperty] : defaultRelWidth, + width: !Number.isNaN(value.properties[relWidthProperty]) + ? toNumber(value.properties[relWidthProperty]) + : defaultRelWidth, color: value.properties[relColorProperty] ? value.properties[relColorProperty] : defaultRelColor, properties: value.properties, }); From d2729d7a4f4dcb2aa32c418a82d49f46bda44f4c Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Fri, 1 Mar 2024 11:42:16 +0100 Subject: [PATCH 034/120] fixing number parsing --- src/chart/ChartUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index cd6feb8c0..dd7eaf6b4 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -95,7 +95,7 @@ export function valueIsObject(value) { } export function toNumber(ref) { - if (ref === undefined) { + if (ref === undefined || typeof ref === 'number') { return ref; } let { low, high } = ref; @@ -172,7 +172,7 @@ export const downloadCSV = (rows) => { }); csv += '\n'; }); - const file = new Blob([`\ufeff${ csv}`], { type: 'text/plain;charset=utf8' }); + const file = new Blob([`\ufeff${csv}`], { type: 'text/plain;charset=utf8' }); element.href = URL.createObjectURL(file); element.download = 'table.csv'; document.body.appendChild(element); // Required for this to work in FireFox From 2211bb7d23072d6517567da3248e0b89bd5da132 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Mon, 4 Mar 2024 19:48:56 +0100 Subject: [PATCH 035/120] Revert "Handle token expiration in SSO (#611)" (#815) This reverts commit 001cee1cfe80a21f7d348cea03a74e1328cbe5df. --- package.json | 1 - src/application/ApplicationActions.ts | 7 +-- src/application/ApplicationReducer.ts | 4 +- src/application/ApplicationThunks.ts | 70 +++------------------------ src/component/sso/SSOUtils.ts | 2 +- src/dashboard/Dashboard.tsx | 7 +-- yarn.lock | 30 ------------ 7 files changed, 13 insertions(+), 108 deletions(-) diff --git a/package.json b/package.json index 7632e3c79..1b3a74b3b 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,6 @@ "mui-color": "^2.0.0-beta.2", "mui-nested-menu": "^3.2.1", "neo4j-client-sso": "^1.2.2", - "neo4j-driver": "^5.12.0", "openai": "^3.3.0", "postcss": "^8.4.21", "postcss-loader": "^7.2.4", diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 5d7f815dc..0b556f2dc 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -2,8 +2,6 @@ * This file contains all state-changing actions relevant for the main application. */ -import { SSOProviderOriginal } from 'neo4j-client-sso'; - export const CLEAR_NOTIFICATION = 'APPLICATION/CLEAR_NOTIFICATION'; export const clearNotification = () => ({ type: CLEAR_NOTIFICATION, @@ -58,11 +56,10 @@ export const setConnectionProperties = ( port: string, database: string, username: string, - password: string, - ssoProviders?: SSOProviderOriginal[] + password: string ) => ({ type: SET_CONNECTION_PROPERTIES, - payload: { protocol, url, port, database, username, password, ssoProviders }, + payload: { protocol, url, port, database, username, password }, }); export const SET_BASIC_CONNECTION_PROPERTIES = 'APPLICATION/SET_BASIC_CONNECTION_PROPERTIES'; diff --git a/src/application/ApplicationReducer.ts b/src/application/ApplicationReducer.ts index 590e930db..e662ade63 100644 --- a/src/application/ApplicationReducer.ts +++ b/src/application/ApplicationReducer.ts @@ -64,7 +64,6 @@ const initialState = { database: '', username: 'neo4j', password: '', - ssoProviders: [], }, shareDetails: undefined, desktopConnection: null, @@ -247,7 +246,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa return state; } case SET_CONNECTION_PROPERTIES: { - const { protocol, url, port, database, username, password, ssoProviders } = payload; + const { protocol, url, port, database, username, password } = payload; state = update(state, { connection: { protocol: protocol, @@ -256,7 +255,6 @@ export const applicationReducer = (state = initialState, action: { type: any; pa database: database, username: username, password: password, - ssoProviders, }, }); return state; diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index 965d7fc78..fc880fd3a 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -1,3 +1,4 @@ +import { createDriver } from 'use-neo4j'; import { initializeSSO } from '../component/sso/SSOUtils'; import { DEFAULT_SCREEN, Screens } from '../config/ApplicationConfig'; import { setDashboard } from '../dashboard/DashboardActions'; @@ -43,9 +44,6 @@ import { } from './ApplicationActions'; import { setLoggingMode, setLoggingDatabase, setLogErrorNotification } from './logging/LoggingActions'; import { version } from '../modal/AboutModal'; -import neo4j, { auth, authTokenManagers } from 'neo4j-driver'; -import type { Neo4jScheme } from 'use-neo4j/dist/neo4j-config.interface'; -import { SSOProviderOriginal, handleRefreshingToken } from 'neo4j-client-sso'; import { applicationIsStandalone } from './ApplicationSelectors'; import { applicationGetLoggingSettings } from './logging/LoggingSelectors'; import { createLogThunk } from './logging/LoggingThunk'; @@ -56,47 +54,6 @@ import { createUUID } from '../utils/uuid'; * Several actions/other thunks may be dispatched from here. */ -export const createDriver = ( - scheme: Neo4jScheme, - host: string, - port: string | number, - username?: string, - password?: string, - config?: { userAgent?: string }, - ssoProviders: SSOProviderOriginal[] = [] -) => { - if (ssoProviders.length > 0) { - const authTokenMgr = authTokenManagers.bearer({ - tokenProvider: async () => { - const credentials = await handleRefreshingToken(ssoProviders); - const token = auth.bearer(credentials.password); - // Get the expiration from the JWT's payload, which is a JSON string encoded - // using base64. You could also use a JWT parsing lib - const [, payloadBase64] = credentials.password.split('.'); - const payload: unknown = JSON.parse(window.atob(payloadBase64 ?? '')); - let expiration: Date; - if (typeof payload === 'object' && payload !== null && 'exp' in payload) { - expiration = new Date(Number(payload.exp) * 1000); - } else { - expiration = new Date(); - } - - return { - expiration, - token, - }; - }, - }); - return neo4j.driver(`${scheme}://${host}:${port}`, authTokenMgr, config); - } - - if (!username || !password) { - return neo4j.driver(`${scheme}://${host}:${port}`); - } - - return neo4j.driver(`${scheme}://${host}:${port}`, neo4j.auth.basic(username, password), config); -}; - /** * Establish a connection to Neo4j with the specified credentials. Open/close the relevant windows when connection is made (un)successfully. * @param protocol - the neo4j protocol (e.g. bolt, bolt+s, neo4j+s, ...) @@ -105,24 +62,14 @@ export const createDriver = ( * @param database - the Neo4j database to connect to. * @param username - Neo4j username. * @param password - Neo4j password. - * @param SSOProviders - List of available SSO providers */ export const createConnectionThunk = - (protocol, url, port, database, username, password, SSOProviders = []) => - (dispatch: any, getState: any) => { + (protocol, url, port, database, username, password) => (dispatch: any, getState: any) => { const loggingState = getState(); const loggingSettings = applicationGetLoggingSettings(loggingState); const neodashMode = applicationIsStandalone(loggingState) ? 'Standalone' : 'Editor'; try { - const driver = createDriver( - protocol, - url, - port, - username, - password, - { userAgent: `neodash/v${version}` }, - SSOProviders - ); + const driver = createDriver(protocol, url, port, username, password, { userAgent: `neodash/v${version}` }); // eslint-disable-next-line no-console console.log('Attempting to connect...'); const validateConnection = (records) => { @@ -561,7 +508,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setAboutModalOpen(false)); dispatch(setConnected(false)); dispatch(setWelcomeScreenOpen(false)); - const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials, ssoProviders) => { + const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials) => { if (standalone) { // Redirected from SSO and running in viewer mode, merge retrieved config with hardcoded credentials. dispatch( @@ -571,8 +518,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); dispatch( @@ -582,8 +528,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); } else { @@ -595,8 +540,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: state.application.connection.port, state.application.connection.database, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); dispatch(setConnected(true)); diff --git a/src/component/sso/SSOUtils.ts b/src/component/sso/SSOUtils.ts index b9b6f038c..c25e0d086 100644 --- a/src/component/sso/SSOUtils.ts +++ b/src/component/sso/SSOUtils.ts @@ -118,7 +118,7 @@ export const initializeSSO = async (cachedSSODiscoveryUrl, _setCredentials) => { // Successful credentials retrieval. // Log in at the Neo4j dbms now using the Neo4j (js) driver. // - _setCredentials(credentials, mergedSSOProviders); + _setCredentials(credentials); // Exemplifying retrieval of stored URL paramenters _retrieveAdditionalURLParameters(); diff --git a/src/dashboard/Dashboard.tsx b/src/dashboard/Dashboard.tsx index acc4bb712..1039fce91 100644 --- a/src/dashboard/Dashboard.tsx +++ b/src/dashboard/Dashboard.tsx @@ -3,7 +3,7 @@ import NeoPage from '../page/Page'; import NeoDashboardHeader from './header/DashboardHeader'; import NeoDashboardTitle from './header/DashboardTitle'; import NeoDashboardHeaderPageList from './header/DashboardHeaderPageList'; -import { Neo4jProvider } from 'use-neo4j'; +import { createDriver, Neo4jProvider } from 'use-neo4j'; import { applicationGetConnection, applicationGetStandaloneSettings } from '../application/ApplicationSelectors'; import { connect } from 'react-redux'; import NeoDashboardConnectionUpdateHandler from '../component/misc/DashboardConnectionUpdateHandler'; @@ -11,7 +11,6 @@ import { forceRefreshPage } from '../page/PageActions'; import { getPageNumber } from '../settings/SettingsSelectors'; import { createNotificationThunk } from '../page/PageThunks'; import { version } from '../modal/AboutModal'; -import { createDriver } from '../application/ApplicationThunks'; import NeoDashboardSidebar from './sidebar/DashboardSidebar'; const Dashboard = ({ @@ -33,10 +32,8 @@ const Dashboard = ({ connection.port, connection.username, connection.password, - { userAgent: `neodash/v${version}` }, - connection.ssoProviders + { userAgent: `neodash/v${version}` } ); - // @ts-ignore wrong driver version setDriver(newDriver); } const content = ( diff --git a/yarn.lock b/yarn.lock index c5dcfb1f6..d9935f9e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10435,15 +10435,6 @@ neo4j-client-sso@^1.2.2: jwt-decode "^3.1.2" lodash.pick "^4.4.0" -neo4j-driver-bolt-connection@5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-5.12.0.tgz#aff161367d287579d7bdd3ee4179eed324398210" - integrity sha512-dlYbFsfT0HopGItitG5uDK4nAkcqSPNtRqMz318qy//7fb/7OXVLGYikj57Ve1toJiJD8IIVErt/dVuEUHVxGA== - dependencies: - buffer "^6.0.3" - neo4j-driver-core "5.12.0" - string_decoder "^1.3.0" - neo4j-driver-bolt-connection@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-4.4.10.tgz#a8b5b7f82b1d6f9a71a43eafcb0e21512ea24908" @@ -10453,11 +10444,6 @@ neo4j-driver-bolt-connection@^4.4.10: neo4j-driver-core "^4.4.10" string_decoder "^1.3.0" -neo4j-driver-core@5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-5.12.0.tgz#1f8616da7e945921574811368a68f5d2501bfd35" - integrity sha512-xBRi5oezysDUvtvBiIgBchzumkDZxvR9ol9sUtA9PBgVENeSmPH3CncitY8S979CFELS6wH7kydcjPLB4QMOzA== - neo4j-driver-core@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-4.4.10.tgz#6f4c1ccc1199f864b149bdcef5e50e45ff95c29e" @@ -10473,15 +10459,6 @@ neo4j-driver@^4.4.5: neo4j-driver-core "^4.4.10" rxjs "^6.6.3" -neo4j-driver@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver/-/neo4j-driver-5.12.0.tgz#1b2d7db1672ad224f0146542efee306a0a156a11" - integrity sha512-T2Vz63XDkL9TomM16dBusuXbo7d9SIGw2g3VR/rmrWTdbl1V1LYFx/u1P7AwBsFuX08oncKHfZwHGsWrCvdMyA== - dependencies: - neo4j-driver-bolt-connection "5.12.0" - neo4j-driver-core "5.12.0" - rxjs "^7.8.1" - next-tick@1, next-tick@^1.0.0, next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" @@ -12311,13 +12288,6 @@ rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: dependencies: tslib "^2.1.0" -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - sade@^1.7.3: version "1.8.1" resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" From 4b779a0cd3e9623c6fb6c3bd1d7b27b74f893986 Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Wed, 6 Mar 2024 11:57:12 +0100 Subject: [PATCH 036/120] Fixing RBAC feature + parameters (#813) * fixed race condition, to work on other points in PR * Fixes for complex parameter types in forms * Added special case for handling cross-db label access * handling fixed grants without non-fixed grants * Added error handling to RBAC extension * Added back async modifier * bug fixin grbac --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong --- src/extensions/forms/FormsReportConfig.tsx | 2 +- src/extensions/forms/chart/NeoForm.tsx | 2 +- .../settings/NeoFormCardSettingsModal.tsx | 7 +- src/extensions/rbac/RBACManagementMenu.tsx | 7 +- src/extensions/rbac/RBACManagementModal.tsx | 96 +++++++++++++++++-- src/extensions/rbac/RBACUtils.ts | 94 +++++++++++++----- src/modal/ExportModal.tsx | 2 +- src/report/ReportQueryRunner.ts | 1 + 8 files changed, 170 insertions(+), 41 deletions(-) diff --git a/src/extensions/forms/FormsReportConfig.tsx b/src/extensions/forms/FormsReportConfig.tsx index 4367a7497..5918a4425 100644 --- a/src/extensions/forms/FormsReportConfig.tsx +++ b/src/extensions/forms/FormsReportConfig.tsx @@ -46,7 +46,7 @@ export const FORMS = { label: 'Clear parameters after submit', type: SELECTION_TYPES.LIST, values: [true, false], - default: false, + default: true, }, hasResetButton: { label: 'Has Reset Button', diff --git a/src/extensions/forms/chart/NeoForm.tsx b/src/extensions/forms/chart/NeoForm.tsx index e8d33641e..9ae9c9109 100644 --- a/src/extensions/forms/chart/NeoForm.tsx +++ b/src/extensions/forms/chart/NeoForm.tsx @@ -26,7 +26,7 @@ const NeoForm = (props: ChartProps) => { const hasResetButton = settings?.hasResetButton ?? true; const hasSubmitButton = settings?.hasSubmitButton ?? true; const hasSubmitMessage = settings?.hasSubmitMessage ?? true; - const clearParametersAfterSubmit = settings?.clearParametersAfterSubmit ?? false; + const clearParametersAfterSubmit = settings?.clearParametersAfterSubmit ?? true; const [submitButtonActive, setSubmitButtonActive] = React.useState(true); const [status, setStatus] = React.useState(FormStatus.DATA_ENTRY); const [formResults, setFormResults] = React.useState([]); diff --git a/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx b/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx index fc9fec0ad..87515c24b 100644 --- a/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx +++ b/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { Button, Dialog } from '@neo4j-ndl/react'; import ParameterSelectCardSettings from '../../../chart/parameter/ParameterSelectCardSettings'; import NeoCardSettingsFooter from '../../../card/settings/CardSettingsFooter'; +import { objMerge } from '../../../utils/ObjectManipulation'; const NeoFormCardSettingsModal = ({ open, setOpen, index, formFields, setFormFields, database, extensions }) => { const [advancedSettingsOpen, setAdvancedSettingsOpen] = React.useState(false); @@ -24,15 +25,19 @@ const NeoFormCardSettingsModal = ({ open, setOpen, index, formFields, setFormFie query={formFields[index].query} type={'select'} database={database} - settings={formFields[index].settings} + settings={objMerge({ inputMode: 'cypher' }, formFields[index].settings)} extensions={extensions} onReportSettingUpdate={(key, value) => { const newFormFields = [...formFields]; newFormFields[index].settings[key] = value; + if (key == 'type') { + newFormFields[index].type = value; + } setFormFields(newFormFields); }} onQueryUpdate={(query) => { const newFormFields = [...formFields]; + newFormFields[index].query = query; setFormFields(newFormFields); }} diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index 264f84643..1a85b08fe 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -19,7 +19,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti if (!MenuOpen) { return; } - const query = `SHOW ROLES YIELD role WHERE role <> "PUBLIC" return role`; + const query = `SHOW PRIVILEGES YIELD role, action WHERE role <> "PUBLIC" RETURN role, 'dbms_actions' in collect(action)`; runCypherQuery( driver, 'system', @@ -32,7 +32,8 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti createNotification('Unable to retrieve roles', records[0].error); return; } - setRoles(records.map((record) => record._fields[0])); + // Only display roles which are not able to do 'dbms_actions', i.e. they are not admins. + setRoles(records.filter((r) => r._fields[1] == false).map((record) => record._fields[0])); } ); }, [MenuOpen]); @@ -71,7 +72,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti { setIsModalOpen(false); }} diff --git a/src/extensions/rbac/RBACManagementModal.tsx b/src/extensions/rbac/RBACManagementModal.tsx index c19f5ea21..178fa081e 100644 --- a/src/extensions/rbac/RBACManagementModal.tsx +++ b/src/extensions/rbac/RBACManagementModal.tsx @@ -26,6 +26,12 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti const [labels, setLabels] = useState([]); const [allowList, setAllowList] = useState([]); const [denyList, setDenyList] = useState([]); + const [fixedAllowList, setFixedAllowList] = useState([]); + const [fixedDenyList, setFixedDenyList] = useState([]); + const [denyCompleted, setDenyCompleted] = useState(false); + const [allowCompleted, setAllowCompleted] = useState(false); + const [usersCompleted, setUsersCompleted] = useState(false); + const [failed, setFailed] = useState(false); useEffect(() => { if (!open) { @@ -35,10 +41,23 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti setSelectedDatabase(''); return; } + setDenyCompleted(false); + setAllowCompleted(false); + setUsersCompleted(false); + setFailed(false); retrieveDatabaseList(driver, setDatabases); retrieveNeo4jUsers(driver, currentRole, setNeo4jUsers, setSelectedUsers); }, [open]); + useEffect(() => { + console.log([denyCompleted, allowCompleted, usersCompleted, failed]); + if (failed !== false) { + createNotification('Unable to update privileges', `${failed}`); + } else if (denyCompleted && allowCompleted && usersCompleted) { + createNotification('Success', `Access for role '${currentRole}' updated.`); + } + }, [denyCompleted, allowCompleted, usersCompleted, failed]); + const parseLabelsList = (database, records) => { const allLabels = records.map((record) => record._fields[0]).filter((l) => l !== '_Neodash_Dashboard'); retrieveAllowAndDenyLists( @@ -49,6 +68,8 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti setLabels, setAllowList, setDenyList, + setFixedAllowList, + setFixedDenyList, setLoaded ); }; @@ -58,16 +79,49 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti retrieveLabelsList(driver, selectedOption.value, (records) => parseLabelsList(selectedOption.value, records)); }; - const handleSave = () => { - updateUsers(driver, currentRole, neo4jUsers, selectedUsers); + const handleSave = async () => { + createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); + console.log(selectedUsers); + updateUsers( + driver, + currentRole, + neo4jUsers, + selectedUsers, + () => setUsersCompleted(true), + (failReason) => setFailed(`Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${failReason}`) + ); + if (selectedDatabase) { - createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); - updatePrivileges(driver, selectedDatabase, currentRole, labels, denyList, Operation.DENY, createNotification); - updatePrivileges(driver, selectedDatabase, currentRole, labels, allowList, Operation.GRANT, createNotification); + const nonFixedDenyList = denyList.filter((n) => !fixedDenyList.includes(n)); + const nonFixedAllowList = allowList.filter((n) => !fixedDenyList.includes(n)); + updatePrivileges( + driver, + selectedDatabase, + currentRole, + labels, + nonFixedDenyList, + Operation.DENY, + () => setDenyCompleted(true), + (failReason) => setFailed(`Operation 'DENY LABEL ACCESS' failed.\n Reason: ${failReason}`) + ).then(() => { + updatePrivileges( + driver, + selectedDatabase, + currentRole, + labels, + nonFixedAllowList, + Operation.GRANT, + () => setAllowCompleted(true), + (failReason) => setFailed(`Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${failReason}`) + ); + }); } else { - createNotification('Success', `Users have been updated for role '${currentRole}'.`); + // Since there is no database selected, we don't run the DENY/ALLOW queries. + // We just mark them as completed so the success message shows up. + setDenyCompleted(true); + setAllowCompleted(true); } - + console.log([denyCompleted, allowCompleted, usersCompleted, failed]); handleClose(); }; @@ -138,7 +192,17 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti value: allowList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), isMulti: true, - onChange: (val) => setAllowList(val.map((v) => v.value)), + onChange: (val) => { + // Make sure that only database-specific label access rules can be changed from this UI. + if (fixedAllowList.every((v) => val.map((selected) => selected.value).includes(v))) { + setAllowList(val.map((v) => v.value)); + } else { + createNotification( + 'Label cannot be removed', + 'The selected label is allowed access across all databases. You cannot remove this privilege using this interface.' + ); + } + }, }} /> @@ -154,9 +218,21 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti placeholder: 'Select labels', isClearable: false, value: denyList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), - options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + options: labels + .filter((l) => l !== '*') + .map((nodelabel) => ({ value: nodelabel, label: nodelabel })), isMulti: true, - onChange: (val) => setDenyList(val.map((v) => v.value)), + onChange: (val) => { + // Make sure that only database-specific label access rules can be changed from this UI. + if (fixedDenyList.every((v) => val.map((selected) => selected.value).includes(v))) { + setDenyList(val.map((v) => v.value)); + } else { + createNotification( + 'Label cannot be removed', + 'The selected label is denied access across all databases. You cannot remove this privilege using this interface.' + ); + } + }, }} /> diff --git a/src/extensions/rbac/RBACUtils.ts b/src/extensions/rbac/RBACUtils.ts index 0ed54781b..69e701bb9 100644 --- a/src/extensions/rbac/RBACUtils.ts +++ b/src/extensions/rbac/RBACUtils.ts @@ -15,15 +15,16 @@ export enum Operation { * @param newLabels list of new labels in the database, for which priveleges are changed. * @param operation The operation, either 'GRANT' or 'DENY' */ -export const updatePrivileges = ( +export async function updatePrivileges( driver, database, role, allLabels, newLabels, operation: Operation, - createNotification -) => { + onSuccess, + onFail +) { // TODO - should we also drop cross-database DENYs (`ON GRAPH *`) to catch the true full set? // TODO - there // 1. Special case for '*'. Create it if needed to be there, otherwise revoke it. @@ -49,7 +50,7 @@ export const updatePrivileges = ( {}, 1000, (status) => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + if (status == QueryStatus.NO_DATA || status == QueryStatus.COMPLETE) { // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. // We build in an artificial delay... const timeout = setTimeout(() => { @@ -67,21 +68,38 @@ export const updatePrivileges = ( ), {}, 1000, - () => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { - createNotification('Success', `Access for role '${role}' updated.`); + (status) => { + if (status == QueryStatus.NO_DATA || status == QueryStatus.COMPLETE) { + onSuccess(); + } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); } } ); + } else { + onSuccess(); } }, 1000); } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); + } } ); } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); + } } ); -}; +} /** * Generic query builder for adding/removing grants/denies for a list of labels. @@ -120,6 +138,8 @@ export const retrieveAllowAndDenyLists = ( setLabels, setAllowList, setDenyList, + setFixedAllowList, + setFixedDenyList, setLoaded ) => { runCypherQuery( @@ -131,7 +151,7 @@ export const retrieveAllowAndDenyLists = ( AND role = $rolename AND action = 'match' AND segment STARTS WITH 'NODE(' - RETURN access, collect(substring(segment, 5, size(segment)-6)) as nodes`, + RETURN access, collect(substring(segment, 5, size(segment)-6)) as nodes, graph = "*" as fixed`, { rolename: currentRole, database: database }, 1000, (status) => { @@ -142,12 +162,21 @@ export const retrieveAllowAndDenyLists = ( }, (records) => { // Extract granted and denied label list from the result of the SHOW PRIVILEGES query - const grants = records.filter((r) => r._fields[0] == 'GRANTED'); - const denies = records.filter((r) => r._fields[0] == 'DENIED'); + const grants = records.filter((r) => r._fields[0] == 'GRANTED' && r._fields[2] == false); + const denies = records.filter((r) => r._fields[0] == 'DENIED' && r._fields[2] == false); const grantedLabels = grants[0] ? [...new Set(grants[0]._fields[1])] : []; const deniedLabels = denies[0] ? [...new Set(denies[0]._fields[1])] : []; - setAllowList(grantedLabels); - setDenyList(deniedLabels); + + // Do the same for fixed grants (those stored under the '*' graph permission) + const fixedGrants = records.filter((r) => r._fields[0] == 'GRANTED' && r._fields[2] == true); + const fixedDenies = records.filter((r) => r._fields[0] == 'DENIED' && r._fields[2] == true); + const fixedGrantedLabels = fixedGrants[0] ? [...new Set(fixedGrants[0]._fields[1])] : []; + const fixedDeniedLabels = fixedDenies[0] ? [...new Set(fixedDenies[0]._fields[1])] : []; + + setAllowList([...new Set(grantedLabels.concat(fixedGrantedLabels))]); + setDenyList([...new Set(deniedLabels.concat(fixedDeniedLabels))]); + setFixedAllowList(fixedGrantedLabels); + setFixedDenyList(fixedDeniedLabels); // Here we build a set of all POSSIBLE labels, that includes the list in the database, plus those in denies and grants. const possibleLabels = [...new Set(allLabels.concat(grantedLabels).concat(deniedLabels))]; @@ -226,8 +255,9 @@ export function retrieveDatabaseList(driver, setDatabases: React.Dispatch { +export async function updateUsers(driver, currentRole, allUsers, selectedUsers, onSuccess, onFail) { // 1. Build the query that removes all users from the role. + let globalStatus = -1; await runCypherQuery( driver, 'system', @@ -235,16 +265,32 @@ export const updateUsers = async (driver, currentRole, allUsers, selectedUsers) {}, 1000, (status) => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { - // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. - // We build in an artificial delay... - const timeout = setTimeout(() => { - // 2. Re-assign only selected users to the role. - if (selectedUsers.length > 0) { - runCypherQuery(driver, 'system', `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`); - } - }, 1000); + globalStatus = status; + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); } } ); -}; + if (globalStatus == QueryStatus.NO_DATA || globalStatus == QueryStatus.COMPLETE) { + // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. + // We build in an artificial delay... + if (selectedUsers.length > 0) { + await runCypherQuery( + driver, + 'system', + `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`, + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + onSuccess(); + } + } + ); + } else { + onSuccess(); + } + } +} diff --git a/src/modal/ExportModal.tsx b/src/modal/ExportModal.tsx index 7040ede4a..bb1d76fe0 100644 --- a/src/modal/ExportModal.tsx +++ b/src/modal/ExportModal.tsx @@ -14,7 +14,7 @@ export const NeoExportModal = ({ dashboard }) => { return ( <> - setOpen(true)} aria-label='Export' title='Export'> + setOpen(true)} aria-label='Export'> diff --git a/src/report/ReportQueryRunner.ts b/src/report/ReportQueryRunner.ts index 4259b66e6..a4cbc689b 100644 --- a/src/report/ReportQueryRunner.ts +++ b/src/report/ReportQueryRunner.ts @@ -65,6 +65,7 @@ export async function runCypherQuery( setStatus(QueryStatus.ERROR); return; } + console.log(query); const session = database ? driver.session({ database: database }) : driver.session(); const transaction = session.beginTransaction({ timeout: queryTimeLimit * 1000, connectionTimeout: 2000 }); From 4a1477271242172880df41856ace73738a4c511f Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 6 Mar 2024 11:59:10 +0100 Subject: [PATCH 037/120] Added 2.4.4 release notes, bumped version (#818) --- .github/workflows/master-deployment.yml | 4 +-- Dockerfile | 2 +- changelog.md | 9 +++++ .../pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 35 +++++-------------- src/modal/AboutModal.tsx | 2 +- 7 files changed, 23 insertions(+), 33 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index b170bcc03..a8a966f2a 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.3 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.4 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.3 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.4 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index c2f4fa361..a5c9fcf56 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,4 +43,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.3" +LABEL version="2.4.4" diff --git a/changelog.md b/changelog.md index 1542e992d..c80e24157 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +## NeoDash 2.4.4 +This is a hotfix release fixing some breaking issues in the 2.4.3: +- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) +- Reverted new connection handler for auto-renewed SSO sessions. [815](https://github.com/neo4j-labs/neodash/pull/815) +- Improved handling of parameters in form extension, resolved local state issues. [813](https://github.com/neo4j-labs/neodash/pull/813) +- Updated Role management extension to no longer execute queries in parallel, improved UX and error handling [813](https://github.com/neo4j-labs/neodash/pull/813) + +If you are currently using NeoDash version 2.4.3, we recommend updating as soon as possible. + ## NeoDash 2.4.3 This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 8f25da594..d77d7e8b6 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.3 username@host:/usr/share/nginx/html +scp neodash-2.4.4 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index 1b3a74b3b..a5cc534df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.3", + "version": "2.4.4", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index bfa9e6f9e..2b364ba45 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,27 +1,8 @@ -## NeoDash 2.4.3 -This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: - -Dashboard management and access control: -- Added a UI for handling dashboard access using RBAC, as well as a new extension to simply access control. -- Added button to sidebar to refresh the list of dashboards saved in the database. -- Improved handling and detection of draft dashboards in the dashboard sidebar. - -Other improvements: -- Changed CSV export functionality for tables to use UTF-8 format. -- Various improvements / fixes to the documentation to include new images, and up-to-date functionality. -- Added logic for handling refresh tokens when connected to NeoDash via SSO. -- Incorporated tooltips for bar charts with and without custom labels. - -Bug fixes and testing: -- Implemented bug fixes on type casting for numeric parameter selectors. -- Fixed issue with report actions not functioning properly on node click events. -- Extended test suite with Cypress tests for advanced settings in the bar chart. - -Thanks to all the contributors for this release: -- [OskarDamkjaer](https://github.com/OskarDamkjaer) -- [alfredorubin96](https://github.com/alfredorubin96), -- [AleSim94](https://github.com/AleSim94), -- [BennuFire](https://github.com/BennuFire), -- [jacobbleakley-neo4j](https://github.com/jacobbleakley-neo4j), -- [josepmonclus](https://github.com/josepmonclus) -- [nielsdejong](https://github.com/nielsdejong) \ No newline at end of file +## NeoDash 2.4.4 +This is a hotfix release fixing some breaking issues in the 2.4.3: +- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) +- Reverted new connection handler for auto-renewed SSO sessions. [815](https://github.com/neo4j-labs/neodash/pull/815) +- Improved handling of parameters in form extension, resolved local state issues. [813](https://github.com/neo4j-labs/neodash/pull/813) +- Updated Role management extension to no longer execute queries in parallel, improved UX and error handling [813](https://github.com/neo4j-labs/neodash/pull/813) + +If you are currently using NeoDash version 2.4.3, we recommend updating as soon as possible. \ No newline at end of file diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index 1e40e9dab..d3e8d663f 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.3'; +export const version = '2.4.4'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From 7cd030242686e85c7dc5bc1c554a61e579c80fd0 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 6 Mar 2024 12:03:11 +0100 Subject: [PATCH 038/120] Removed old console.log statements --- src/extensions/rbac/RBACManagementModal.tsx | 2 -- src/report/ReportQueryRunner.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/extensions/rbac/RBACManagementModal.tsx b/src/extensions/rbac/RBACManagementModal.tsx index 178fa081e..f3f17a08c 100644 --- a/src/extensions/rbac/RBACManagementModal.tsx +++ b/src/extensions/rbac/RBACManagementModal.tsx @@ -50,7 +50,6 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti }, [open]); useEffect(() => { - console.log([denyCompleted, allowCompleted, usersCompleted, failed]); if (failed !== false) { createNotification('Unable to update privileges', `${failed}`); } else if (denyCompleted && allowCompleted && usersCompleted) { @@ -121,7 +120,6 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti setDenyCompleted(true); setAllowCompleted(true); } - console.log([denyCompleted, allowCompleted, usersCompleted, failed]); handleClose(); }; diff --git a/src/report/ReportQueryRunner.ts b/src/report/ReportQueryRunner.ts index a4cbc689b..599e4afde 100644 --- a/src/report/ReportQueryRunner.ts +++ b/src/report/ReportQueryRunner.ts @@ -65,7 +65,7 @@ export async function runCypherQuery( setStatus(QueryStatus.ERROR); return; } - console.log(query); + const session = database ? driver.session({ database: database }) : driver.session(); const transaction = session.beginTransaction({ timeout: queryTimeLimit * 1000, connectionTimeout: 2000 }); From 31ccf162afcabc204ffa9d5fdfd78911e648704e Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 6 Mar 2024 12:17:31 +0100 Subject: [PATCH 039/120] 2.4.4 Release (#821) * fixing gantt chart, new driver version was returning {low,high} numbers * Revert "fixing gantt chart, new driver version was returning {low,high} numbers" This reverts commit 4eb92856dd947bc5b768d17bf1a44eab99f2148a. * fixing gantt chart, new driver version was returning {low,high} numbers * NaNs * fixing number parsing * Revert "Handle token expiration in SSO (#611)" (#815) This reverts commit 001cee1cfe80a21f7d348cea03a74e1328cbe5df. * Fixing RBAC feature + parameters (#813) * fixed race condition, to work on other points in PR * Fixes for complex parameter types in forms * Added special case for handling cross-db label access * handling fixed grants without non-fixed grants * Added error handling to RBAC extension * Added back async modifier * bug fixin grbac --------- Co-authored-by: Alfred Rubin Co-authored-by: Niels de Jong * Added 2.4.4 release notes, bumped version (#818) * Removed old console.log statements --------- Co-authored-by: Alfred Rubin Co-authored-by: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Co-authored-by: Harold Agudelo --- .github/workflows/master-deployment.yml | 4 +- Dockerfile | 2 +- changelog.md | 9 ++ .../pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 3 +- release-notes.md | 35 ++----- src/application/ApplicationActions.ts | 7 +- src/application/ApplicationReducer.ts | 4 +- src/application/ApplicationThunks.ts | 70 ++------------ src/chart/ChartUtils.ts | 4 +- src/chart/graph/util/RecordUtils.ts | 10 +- src/component/sso/SSOUtils.ts | 2 +- src/dashboard/Dashboard.tsx | 7 +- .../advancedcharts/chart/gantt/Utils.ts | 8 +- src/extensions/forms/FormsReportConfig.tsx | 2 +- src/extensions/forms/chart/NeoForm.tsx | 2 +- .../settings/NeoFormCardSettingsModal.tsx | 7 +- src/extensions/rbac/RBACManagementMenu.tsx | 7 +- src/extensions/rbac/RBACManagementModal.tsx | 94 +++++++++++++++++-- src/extensions/rbac/RBACUtils.ts | 94 ++++++++++++++----- src/modal/AboutModal.tsx | 2 +- src/modal/ExportModal.tsx | 2 +- src/report/ReportQueryRunner.ts | 1 + yarn.lock | 30 ------ 24 files changed, 218 insertions(+), 190 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index b170bcc03..a8a966f2a 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.3 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.4 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.3 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.4 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index c2f4fa361..a5c9fcf56 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,4 +43,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.3" +LABEL version="2.4.4" diff --git a/changelog.md b/changelog.md index 1542e992d..c80e24157 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,12 @@ +## NeoDash 2.4.4 +This is a hotfix release fixing some breaking issues in the 2.4.3: +- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) +- Reverted new connection handler for auto-renewed SSO sessions. [815](https://github.com/neo4j-labs/neodash/pull/815) +- Improved handling of parameters in form extension, resolved local state issues. [813](https://github.com/neo4j-labs/neodash/pull/813) +- Updated Role management extension to no longer execute queries in parallel, improved UX and error handling [813](https://github.com/neo4j-labs/neodash/pull/813) + +If you are currently using NeoDash version 2.4.3, we recommend updating as soon as possible. + ## NeoDash 2.4.3 This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 8f25da594..d77d7e8b6 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.3 username@host:/usr/share/nginx/html +scp neodash-2.4.4 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index 7632e3c79..a5cc534df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.3", + "version": "2.4.4", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" @@ -72,7 +72,6 @@ "mui-color": "^2.0.0-beta.2", "mui-nested-menu": "^3.2.1", "neo4j-client-sso": "^1.2.2", - "neo4j-driver": "^5.12.0", "openai": "^3.3.0", "postcss": "^8.4.21", "postcss-loader": "^7.2.4", diff --git a/release-notes.md b/release-notes.md index bfa9e6f9e..2b364ba45 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,27 +1,8 @@ -## NeoDash 2.4.3 -This release contains several improvements and additions to multi-dashboard management, as well as a bug fixes and a variety of quality-of-life improvements: - -Dashboard management and access control: -- Added a UI for handling dashboard access using RBAC, as well as a new extension to simply access control. -- Added button to sidebar to refresh the list of dashboards saved in the database. -- Improved handling and detection of draft dashboards in the dashboard sidebar. - -Other improvements: -- Changed CSV export functionality for tables to use UTF-8 format. -- Various improvements / fixes to the documentation to include new images, and up-to-date functionality. -- Added logic for handling refresh tokens when connected to NeoDash via SSO. -- Incorporated tooltips for bar charts with and without custom labels. - -Bug fixes and testing: -- Implemented bug fixes on type casting for numeric parameter selectors. -- Fixed issue with report actions not functioning properly on node click events. -- Extended test suite with Cypress tests for advanced settings in the bar chart. - -Thanks to all the contributors for this release: -- [OskarDamkjaer](https://github.com/OskarDamkjaer) -- [alfredorubin96](https://github.com/alfredorubin96), -- [AleSim94](https://github.com/AleSim94), -- [BennuFire](https://github.com/BennuFire), -- [jacobbleakley-neo4j](https://github.com/jacobbleakley-neo4j), -- [josepmonclus](https://github.com/josepmonclus) -- [nielsdejong](https://github.com/nielsdejong) \ No newline at end of file +## NeoDash 2.4.4 +This is a hotfix release fixing some breaking issues in the 2.4.3: +- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) +- Reverted new connection handler for auto-renewed SSO sessions. [815](https://github.com/neo4j-labs/neodash/pull/815) +- Improved handling of parameters in form extension, resolved local state issues. [813](https://github.com/neo4j-labs/neodash/pull/813) +- Updated Role management extension to no longer execute queries in parallel, improved UX and error handling [813](https://github.com/neo4j-labs/neodash/pull/813) + +If you are currently using NeoDash version 2.4.3, we recommend updating as soon as possible. \ No newline at end of file diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 5d7f815dc..0b556f2dc 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -2,8 +2,6 @@ * This file contains all state-changing actions relevant for the main application. */ -import { SSOProviderOriginal } from 'neo4j-client-sso'; - export const CLEAR_NOTIFICATION = 'APPLICATION/CLEAR_NOTIFICATION'; export const clearNotification = () => ({ type: CLEAR_NOTIFICATION, @@ -58,11 +56,10 @@ export const setConnectionProperties = ( port: string, database: string, username: string, - password: string, - ssoProviders?: SSOProviderOriginal[] + password: string ) => ({ type: SET_CONNECTION_PROPERTIES, - payload: { protocol, url, port, database, username, password, ssoProviders }, + payload: { protocol, url, port, database, username, password }, }); export const SET_BASIC_CONNECTION_PROPERTIES = 'APPLICATION/SET_BASIC_CONNECTION_PROPERTIES'; diff --git a/src/application/ApplicationReducer.ts b/src/application/ApplicationReducer.ts index 590e930db..e662ade63 100644 --- a/src/application/ApplicationReducer.ts +++ b/src/application/ApplicationReducer.ts @@ -64,7 +64,6 @@ const initialState = { database: '', username: 'neo4j', password: '', - ssoProviders: [], }, shareDetails: undefined, desktopConnection: null, @@ -247,7 +246,7 @@ export const applicationReducer = (state = initialState, action: { type: any; pa return state; } case SET_CONNECTION_PROPERTIES: { - const { protocol, url, port, database, username, password, ssoProviders } = payload; + const { protocol, url, port, database, username, password } = payload; state = update(state, { connection: { protocol: protocol, @@ -256,7 +255,6 @@ export const applicationReducer = (state = initialState, action: { type: any; pa database: database, username: username, password: password, - ssoProviders, }, }); return state; diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index 965d7fc78..fc880fd3a 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -1,3 +1,4 @@ +import { createDriver } from 'use-neo4j'; import { initializeSSO } from '../component/sso/SSOUtils'; import { DEFAULT_SCREEN, Screens } from '../config/ApplicationConfig'; import { setDashboard } from '../dashboard/DashboardActions'; @@ -43,9 +44,6 @@ import { } from './ApplicationActions'; import { setLoggingMode, setLoggingDatabase, setLogErrorNotification } from './logging/LoggingActions'; import { version } from '../modal/AboutModal'; -import neo4j, { auth, authTokenManagers } from 'neo4j-driver'; -import type { Neo4jScheme } from 'use-neo4j/dist/neo4j-config.interface'; -import { SSOProviderOriginal, handleRefreshingToken } from 'neo4j-client-sso'; import { applicationIsStandalone } from './ApplicationSelectors'; import { applicationGetLoggingSettings } from './logging/LoggingSelectors'; import { createLogThunk } from './logging/LoggingThunk'; @@ -56,47 +54,6 @@ import { createUUID } from '../utils/uuid'; * Several actions/other thunks may be dispatched from here. */ -export const createDriver = ( - scheme: Neo4jScheme, - host: string, - port: string | number, - username?: string, - password?: string, - config?: { userAgent?: string }, - ssoProviders: SSOProviderOriginal[] = [] -) => { - if (ssoProviders.length > 0) { - const authTokenMgr = authTokenManagers.bearer({ - tokenProvider: async () => { - const credentials = await handleRefreshingToken(ssoProviders); - const token = auth.bearer(credentials.password); - // Get the expiration from the JWT's payload, which is a JSON string encoded - // using base64. You could also use a JWT parsing lib - const [, payloadBase64] = credentials.password.split('.'); - const payload: unknown = JSON.parse(window.atob(payloadBase64 ?? '')); - let expiration: Date; - if (typeof payload === 'object' && payload !== null && 'exp' in payload) { - expiration = new Date(Number(payload.exp) * 1000); - } else { - expiration = new Date(); - } - - return { - expiration, - token, - }; - }, - }); - return neo4j.driver(`${scheme}://${host}:${port}`, authTokenMgr, config); - } - - if (!username || !password) { - return neo4j.driver(`${scheme}://${host}:${port}`); - } - - return neo4j.driver(`${scheme}://${host}:${port}`, neo4j.auth.basic(username, password), config); -}; - /** * Establish a connection to Neo4j with the specified credentials. Open/close the relevant windows when connection is made (un)successfully. * @param protocol - the neo4j protocol (e.g. bolt, bolt+s, neo4j+s, ...) @@ -105,24 +62,14 @@ export const createDriver = ( * @param database - the Neo4j database to connect to. * @param username - Neo4j username. * @param password - Neo4j password. - * @param SSOProviders - List of available SSO providers */ export const createConnectionThunk = - (protocol, url, port, database, username, password, SSOProviders = []) => - (dispatch: any, getState: any) => { + (protocol, url, port, database, username, password) => (dispatch: any, getState: any) => { const loggingState = getState(); const loggingSettings = applicationGetLoggingSettings(loggingState); const neodashMode = applicationIsStandalone(loggingState) ? 'Standalone' : 'Editor'; try { - const driver = createDriver( - protocol, - url, - port, - username, - password, - { userAgent: `neodash/v${version}` }, - SSOProviders - ); + const driver = createDriver(protocol, url, port, username, password, { userAgent: `neodash/v${version}` }); // eslint-disable-next-line no-console console.log('Attempting to connect...'); const validateConnection = (records) => { @@ -561,7 +508,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setAboutModalOpen(false)); dispatch(setConnected(false)); dispatch(setWelcomeScreenOpen(false)); - const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials, ssoProviders) => { + const success = await initializeSSO(state.application.cachedSSODiscoveryUrl, (credentials) => { if (standalone) { // Redirected from SSO and running in viewer mode, merge retrieved config with hardcoded credentials. dispatch( @@ -571,8 +518,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); dispatch( @@ -582,8 +528,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); } else { @@ -595,8 +540,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: state.application.connection.port, state.application.connection.database, credentials.username, - credentials.password, - ssoProviders + credentials.password ) ); dispatch(setConnected(true)); diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index cd6feb8c0..dd7eaf6b4 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -95,7 +95,7 @@ export function valueIsObject(value) { } export function toNumber(ref) { - if (ref === undefined) { + if (ref === undefined || typeof ref === 'number') { return ref; } let { low, high } = ref; @@ -172,7 +172,7 @@ export const downloadCSV = (rows) => { }); csv += '\n'; }); - const file = new Blob([`\ufeff${ csv}`], { type: 'text/plain;charset=utf8' }); + const file = new Blob([`\ufeff${csv}`], { type: 'text/plain;charset=utf8' }); element.href = URL.createObjectURL(file); element.download = 'table.csv'; document.body.appendChild(element); // Required for this to work in FireFox diff --git a/src/chart/graph/util/RecordUtils.ts b/src/chart/graph/util/RecordUtils.ts index f432e6596..b8d853d33 100644 --- a/src/chart/graph/util/RecordUtils.ts +++ b/src/chart/graph/util/RecordUtils.ts @@ -1,6 +1,6 @@ import { evaluateRulesOnNode, evaluateRulesOnLink } from '../../../extensions/styling/StyleRuleEvaluator'; import { extractNodePropertiesFromRecords, mergeNodePropsFieldsLists } from '../../../report/ReportRecordProcessing'; -import { valueIsArray, valueIsNode, valueIsRelationship, valueIsPath } from '../../ChartUtils'; +import { valueIsArray, valueIsNode, valueIsRelationship, valueIsPath, toNumber } from '../../ChartUtils'; import { GraphChartVisualizationProps } from '../GraphChartVisualization'; import { assignCurvatureToLink } from './RelUtils'; import { isNode } from 'neo4j-driver-core/lib/graph-types.js'; @@ -49,7 +49,9 @@ function extractGraphEntitiesFromField( nodes[value.identity.low] = { id: value.identity.low, labels: value.labels, - size: value.properties[nodeSizeProperty] ? value.properties[nodeSizeProperty] : defaultNodeSize, + size: !Number.isNaN(value.properties[nodeSizeProperty]) + ? toNumber(value.properties[nodeSizeProperty]) + : defaultNodeSize, properties: value.properties, mainLabel: value.labels[value.labels.length - 1], }; @@ -67,7 +69,9 @@ function extractGraphEntitiesFromField( source: value.start.low, target: value.end.low, type: value.type, - width: value.properties[relWidthProperty] ? value.properties[relWidthProperty] : defaultRelWidth, + width: !Number.isNaN(value.properties[relWidthProperty]) + ? toNumber(value.properties[relWidthProperty]) + : defaultRelWidth, color: value.properties[relColorProperty] ? value.properties[relColorProperty] : defaultRelColor, properties: value.properties, }); diff --git a/src/component/sso/SSOUtils.ts b/src/component/sso/SSOUtils.ts index b9b6f038c..c25e0d086 100644 --- a/src/component/sso/SSOUtils.ts +++ b/src/component/sso/SSOUtils.ts @@ -118,7 +118,7 @@ export const initializeSSO = async (cachedSSODiscoveryUrl, _setCredentials) => { // Successful credentials retrieval. // Log in at the Neo4j dbms now using the Neo4j (js) driver. // - _setCredentials(credentials, mergedSSOProviders); + _setCredentials(credentials); // Exemplifying retrieval of stored URL paramenters _retrieveAdditionalURLParameters(); diff --git a/src/dashboard/Dashboard.tsx b/src/dashboard/Dashboard.tsx index acc4bb712..1039fce91 100644 --- a/src/dashboard/Dashboard.tsx +++ b/src/dashboard/Dashboard.tsx @@ -3,7 +3,7 @@ import NeoPage from '../page/Page'; import NeoDashboardHeader from './header/DashboardHeader'; import NeoDashboardTitle from './header/DashboardTitle'; import NeoDashboardHeaderPageList from './header/DashboardHeaderPageList'; -import { Neo4jProvider } from 'use-neo4j'; +import { createDriver, Neo4jProvider } from 'use-neo4j'; import { applicationGetConnection, applicationGetStandaloneSettings } from '../application/ApplicationSelectors'; import { connect } from 'react-redux'; import NeoDashboardConnectionUpdateHandler from '../component/misc/DashboardConnectionUpdateHandler'; @@ -11,7 +11,6 @@ import { forceRefreshPage } from '../page/PageActions'; import { getPageNumber } from '../settings/SettingsSelectors'; import { createNotificationThunk } from '../page/PageThunks'; import { version } from '../modal/AboutModal'; -import { createDriver } from '../application/ApplicationThunks'; import NeoDashboardSidebar from './sidebar/DashboardSidebar'; const Dashboard = ({ @@ -33,10 +32,8 @@ const Dashboard = ({ connection.port, connection.username, connection.password, - { userAgent: `neodash/v${version}` }, - connection.ssoProviders + { userAgent: `neodash/v${version}` } ); - // @ts-ignore wrong driver version setDriver(newDriver); } const content = ( diff --git a/src/extensions/advancedcharts/chart/gantt/Utils.ts b/src/extensions/advancedcharts/chart/gantt/Utils.ts index 012c77201..331be20ff 100644 --- a/src/extensions/advancedcharts/chart/gantt/Utils.ts +++ b/src/extensions/advancedcharts/chart/gantt/Utils.ts @@ -1,3 +1,4 @@ +import { toNumber } from '../../../../chart/ChartUtils'; import { buildGraphVisualizationObjectFromRecords } from '../../../../chart/graph/util/RecordUtils'; import date_utils from './frappe/lib/date_utils'; @@ -97,9 +98,9 @@ export function createTasksList( return undefined; } } - return { - start: new Date(neoStartDate.year, neoStartDate.month, neoStartDate.day), - end: new Date(neoEndDate.year, neoEndDate.month, neoEndDate.day), + let res = { + start: new Date(toNumber(neoStartDate.year), toNumber(neoStartDate.month), toNumber(neoStartDate.day)), + end: new Date(toNumber(neoEndDate.year), toNumber(neoEndDate.month), toNumber(neoEndDate.day)), name: name || '(undefined)', labels: n.labels, dependencies: dependencies[n.id], @@ -112,6 +113,7 @@ export function createTasksList( isDisabled: true, styles: { progressColor: '#ffbb54', progressSelectedColor: '#ff9e0d' }, }; + return res; }) .filter((i) => i !== undefined); } diff --git a/src/extensions/forms/FormsReportConfig.tsx b/src/extensions/forms/FormsReportConfig.tsx index 4367a7497..5918a4425 100644 --- a/src/extensions/forms/FormsReportConfig.tsx +++ b/src/extensions/forms/FormsReportConfig.tsx @@ -46,7 +46,7 @@ export const FORMS = { label: 'Clear parameters after submit', type: SELECTION_TYPES.LIST, values: [true, false], - default: false, + default: true, }, hasResetButton: { label: 'Has Reset Button', diff --git a/src/extensions/forms/chart/NeoForm.tsx b/src/extensions/forms/chart/NeoForm.tsx index e8d33641e..9ae9c9109 100644 --- a/src/extensions/forms/chart/NeoForm.tsx +++ b/src/extensions/forms/chart/NeoForm.tsx @@ -26,7 +26,7 @@ const NeoForm = (props: ChartProps) => { const hasResetButton = settings?.hasResetButton ?? true; const hasSubmitButton = settings?.hasSubmitButton ?? true; const hasSubmitMessage = settings?.hasSubmitMessage ?? true; - const clearParametersAfterSubmit = settings?.clearParametersAfterSubmit ?? false; + const clearParametersAfterSubmit = settings?.clearParametersAfterSubmit ?? true; const [submitButtonActive, setSubmitButtonActive] = React.useState(true); const [status, setStatus] = React.useState(FormStatus.DATA_ENTRY); const [formResults, setFormResults] = React.useState([]); diff --git a/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx b/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx index fc9fec0ad..87515c24b 100644 --- a/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx +++ b/src/extensions/forms/settings/NeoFormCardSettingsModal.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { Button, Dialog } from '@neo4j-ndl/react'; import ParameterSelectCardSettings from '../../../chart/parameter/ParameterSelectCardSettings'; import NeoCardSettingsFooter from '../../../card/settings/CardSettingsFooter'; +import { objMerge } from '../../../utils/ObjectManipulation'; const NeoFormCardSettingsModal = ({ open, setOpen, index, formFields, setFormFields, database, extensions }) => { const [advancedSettingsOpen, setAdvancedSettingsOpen] = React.useState(false); @@ -24,15 +25,19 @@ const NeoFormCardSettingsModal = ({ open, setOpen, index, formFields, setFormFie query={formFields[index].query} type={'select'} database={database} - settings={formFields[index].settings} + settings={objMerge({ inputMode: 'cypher' }, formFields[index].settings)} extensions={extensions} onReportSettingUpdate={(key, value) => { const newFormFields = [...formFields]; newFormFields[index].settings[key] = value; + if (key == 'type') { + newFormFields[index].type = value; + } setFormFields(newFormFields); }} onQueryUpdate={(query) => { const newFormFields = [...formFields]; + newFormFields[index].query = query; setFormFields(newFormFields); }} diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index 264f84643..1a85b08fe 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -19,7 +19,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti if (!MenuOpen) { return; } - const query = `SHOW ROLES YIELD role WHERE role <> "PUBLIC" return role`; + const query = `SHOW PRIVILEGES YIELD role, action WHERE role <> "PUBLIC" RETURN role, 'dbms_actions' in collect(action)`; runCypherQuery( driver, 'system', @@ -32,7 +32,8 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti createNotification('Unable to retrieve roles', records[0].error); return; } - setRoles(records.map((record) => record._fields[0])); + // Only display roles which are not able to do 'dbms_actions', i.e. they are not admins. + setRoles(records.filter((r) => r._fields[1] == false).map((record) => record._fields[0])); } ); }, [MenuOpen]); @@ -71,7 +72,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti { setIsModalOpen(false); }} diff --git a/src/extensions/rbac/RBACManagementModal.tsx b/src/extensions/rbac/RBACManagementModal.tsx index c19f5ea21..f3f17a08c 100644 --- a/src/extensions/rbac/RBACManagementModal.tsx +++ b/src/extensions/rbac/RBACManagementModal.tsx @@ -26,6 +26,12 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti const [labels, setLabels] = useState([]); const [allowList, setAllowList] = useState([]); const [denyList, setDenyList] = useState([]); + const [fixedAllowList, setFixedAllowList] = useState([]); + const [fixedDenyList, setFixedDenyList] = useState([]); + const [denyCompleted, setDenyCompleted] = useState(false); + const [allowCompleted, setAllowCompleted] = useState(false); + const [usersCompleted, setUsersCompleted] = useState(false); + const [failed, setFailed] = useState(false); useEffect(() => { if (!open) { @@ -35,10 +41,22 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti setSelectedDatabase(''); return; } + setDenyCompleted(false); + setAllowCompleted(false); + setUsersCompleted(false); + setFailed(false); retrieveDatabaseList(driver, setDatabases); retrieveNeo4jUsers(driver, currentRole, setNeo4jUsers, setSelectedUsers); }, [open]); + useEffect(() => { + if (failed !== false) { + createNotification('Unable to update privileges', `${failed}`); + } else if (denyCompleted && allowCompleted && usersCompleted) { + createNotification('Success', `Access for role '${currentRole}' updated.`); + } + }, [denyCompleted, allowCompleted, usersCompleted, failed]); + const parseLabelsList = (database, records) => { const allLabels = records.map((record) => record._fields[0]).filter((l) => l !== '_Neodash_Dashboard'); retrieveAllowAndDenyLists( @@ -49,6 +67,8 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti setLabels, setAllowList, setDenyList, + setFixedAllowList, + setFixedDenyList, setLoaded ); }; @@ -58,16 +78,48 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti retrieveLabelsList(driver, selectedOption.value, (records) => parseLabelsList(selectedOption.value, records)); }; - const handleSave = () => { - updateUsers(driver, currentRole, neo4jUsers, selectedUsers); + const handleSave = async () => { + createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); + console.log(selectedUsers); + updateUsers( + driver, + currentRole, + neo4jUsers, + selectedUsers, + () => setUsersCompleted(true), + (failReason) => setFailed(`Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${failReason}`) + ); + if (selectedDatabase) { - createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); - updatePrivileges(driver, selectedDatabase, currentRole, labels, denyList, Operation.DENY, createNotification); - updatePrivileges(driver, selectedDatabase, currentRole, labels, allowList, Operation.GRANT, createNotification); + const nonFixedDenyList = denyList.filter((n) => !fixedDenyList.includes(n)); + const nonFixedAllowList = allowList.filter((n) => !fixedDenyList.includes(n)); + updatePrivileges( + driver, + selectedDatabase, + currentRole, + labels, + nonFixedDenyList, + Operation.DENY, + () => setDenyCompleted(true), + (failReason) => setFailed(`Operation 'DENY LABEL ACCESS' failed.\n Reason: ${failReason}`) + ).then(() => { + updatePrivileges( + driver, + selectedDatabase, + currentRole, + labels, + nonFixedAllowList, + Operation.GRANT, + () => setAllowCompleted(true), + (failReason) => setFailed(`Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${failReason}`) + ); + }); } else { - createNotification('Success', `Users have been updated for role '${currentRole}'.`); + // Since there is no database selected, we don't run the DENY/ALLOW queries. + // We just mark them as completed so the success message shows up. + setDenyCompleted(true); + setAllowCompleted(true); } - handleClose(); }; @@ -138,7 +190,17 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti value: allowList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), isMulti: true, - onChange: (val) => setAllowList(val.map((v) => v.value)), + onChange: (val) => { + // Make sure that only database-specific label access rules can be changed from this UI. + if (fixedAllowList.every((v) => val.map((selected) => selected.value).includes(v))) { + setAllowList(val.map((v) => v.value)); + } else { + createNotification( + 'Label cannot be removed', + 'The selected label is allowed access across all databases. You cannot remove this privilege using this interface.' + ); + } + }, }} /> @@ -154,9 +216,21 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti placeholder: 'Select labels', isClearable: false, value: denyList.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), - options: labels.map((nodelabel) => ({ value: nodelabel, label: nodelabel })), + options: labels + .filter((l) => l !== '*') + .map((nodelabel) => ({ value: nodelabel, label: nodelabel })), isMulti: true, - onChange: (val) => setDenyList(val.map((v) => v.value)), + onChange: (val) => { + // Make sure that only database-specific label access rules can be changed from this UI. + if (fixedDenyList.every((v) => val.map((selected) => selected.value).includes(v))) { + setDenyList(val.map((v) => v.value)); + } else { + createNotification( + 'Label cannot be removed', + 'The selected label is denied access across all databases. You cannot remove this privilege using this interface.' + ); + } + }, }} /> diff --git a/src/extensions/rbac/RBACUtils.ts b/src/extensions/rbac/RBACUtils.ts index 0ed54781b..69e701bb9 100644 --- a/src/extensions/rbac/RBACUtils.ts +++ b/src/extensions/rbac/RBACUtils.ts @@ -15,15 +15,16 @@ export enum Operation { * @param newLabels list of new labels in the database, for which priveleges are changed. * @param operation The operation, either 'GRANT' or 'DENY' */ -export const updatePrivileges = ( +export async function updatePrivileges( driver, database, role, allLabels, newLabels, operation: Operation, - createNotification -) => { + onSuccess, + onFail +) { // TODO - should we also drop cross-database DENYs (`ON GRAPH *`) to catch the true full set? // TODO - there // 1. Special case for '*'. Create it if needed to be there, otherwise revoke it. @@ -49,7 +50,7 @@ export const updatePrivileges = ( {}, 1000, (status) => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + if (status == QueryStatus.NO_DATA || status == QueryStatus.COMPLETE) { // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. // We build in an artificial delay... const timeout = setTimeout(() => { @@ -67,21 +68,38 @@ export const updatePrivileges = ( ), {}, 1000, - () => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { - createNotification('Success', `Access for role '${role}' updated.`); + (status) => { + if (status == QueryStatus.NO_DATA || status == QueryStatus.COMPLETE) { + onSuccess(); + } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); } } ); + } else { + onSuccess(); } }, 1000); } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); + } } ); } + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); + } } ); -}; +} /** * Generic query builder for adding/removing grants/denies for a list of labels. @@ -120,6 +138,8 @@ export const retrieveAllowAndDenyLists = ( setLabels, setAllowList, setDenyList, + setFixedAllowList, + setFixedDenyList, setLoaded ) => { runCypherQuery( @@ -131,7 +151,7 @@ export const retrieveAllowAndDenyLists = ( AND role = $rolename AND action = 'match' AND segment STARTS WITH 'NODE(' - RETURN access, collect(substring(segment, 5, size(segment)-6)) as nodes`, + RETURN access, collect(substring(segment, 5, size(segment)-6)) as nodes, graph = "*" as fixed`, { rolename: currentRole, database: database }, 1000, (status) => { @@ -142,12 +162,21 @@ export const retrieveAllowAndDenyLists = ( }, (records) => { // Extract granted and denied label list from the result of the SHOW PRIVILEGES query - const grants = records.filter((r) => r._fields[0] == 'GRANTED'); - const denies = records.filter((r) => r._fields[0] == 'DENIED'); + const grants = records.filter((r) => r._fields[0] == 'GRANTED' && r._fields[2] == false); + const denies = records.filter((r) => r._fields[0] == 'DENIED' && r._fields[2] == false); const grantedLabels = grants[0] ? [...new Set(grants[0]._fields[1])] : []; const deniedLabels = denies[0] ? [...new Set(denies[0]._fields[1])] : []; - setAllowList(grantedLabels); - setDenyList(deniedLabels); + + // Do the same for fixed grants (those stored under the '*' graph permission) + const fixedGrants = records.filter((r) => r._fields[0] == 'GRANTED' && r._fields[2] == true); + const fixedDenies = records.filter((r) => r._fields[0] == 'DENIED' && r._fields[2] == true); + const fixedGrantedLabels = fixedGrants[0] ? [...new Set(fixedGrants[0]._fields[1])] : []; + const fixedDeniedLabels = fixedDenies[0] ? [...new Set(fixedDenies[0]._fields[1])] : []; + + setAllowList([...new Set(grantedLabels.concat(fixedGrantedLabels))]); + setDenyList([...new Set(deniedLabels.concat(fixedDeniedLabels))]); + setFixedAllowList(fixedGrantedLabels); + setFixedDenyList(fixedDeniedLabels); // Here we build a set of all POSSIBLE labels, that includes the list in the database, plus those in denies and grants. const possibleLabels = [...new Set(allLabels.concat(grantedLabels).concat(deniedLabels))]; @@ -226,8 +255,9 @@ export function retrieveDatabaseList(driver, setDatabases: React.Dispatch { +export async function updateUsers(driver, currentRole, allUsers, selectedUsers, onSuccess, onFail) { // 1. Build the query that removes all users from the role. + let globalStatus = -1; await runCypherQuery( driver, 'system', @@ -235,16 +265,32 @@ export const updateUsers = async (driver, currentRole, allUsers, selectedUsers) {}, 1000, (status) => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { - // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. - // We build in an artificial delay... - const timeout = setTimeout(() => { - // 2. Re-assign only selected users to the role. - if (selectedUsers.length > 0) { - runCypherQuery(driver, 'system', `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`); - } - }, 1000); + globalStatus = status; + }, + (records) => { + if (records && records[0] && records[0].error) { + onFail(records[0].error); } } ); -}; + if (globalStatus == QueryStatus.NO_DATA || globalStatus == QueryStatus.COMPLETE) { + // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. + // We build in an artificial delay... + if (selectedUsers.length > 0) { + await runCypherQuery( + driver, + 'system', + `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`, + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + onSuccess(); + } + } + ); + } else { + onSuccess(); + } + } +} diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index 1e40e9dab..d3e8d663f 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.3'; +export const version = '2.4.4'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { diff --git a/src/modal/ExportModal.tsx b/src/modal/ExportModal.tsx index 7040ede4a..bb1d76fe0 100644 --- a/src/modal/ExportModal.tsx +++ b/src/modal/ExportModal.tsx @@ -14,7 +14,7 @@ export const NeoExportModal = ({ dashboard }) => { return ( <> - setOpen(true)} aria-label='Export' title='Export'> + setOpen(true)} aria-label='Export'> diff --git a/src/report/ReportQueryRunner.ts b/src/report/ReportQueryRunner.ts index 4259b66e6..599e4afde 100644 --- a/src/report/ReportQueryRunner.ts +++ b/src/report/ReportQueryRunner.ts @@ -65,6 +65,7 @@ export async function runCypherQuery( setStatus(QueryStatus.ERROR); return; } + const session = database ? driver.session({ database: database }) : driver.session(); const transaction = session.beginTransaction({ timeout: queryTimeLimit * 1000, connectionTimeout: 2000 }); diff --git a/yarn.lock b/yarn.lock index c5dcfb1f6..d9935f9e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10435,15 +10435,6 @@ neo4j-client-sso@^1.2.2: jwt-decode "^3.1.2" lodash.pick "^4.4.0" -neo4j-driver-bolt-connection@5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-5.12.0.tgz#aff161367d287579d7bdd3ee4179eed324398210" - integrity sha512-dlYbFsfT0HopGItitG5uDK4nAkcqSPNtRqMz318qy//7fb/7OXVLGYikj57Ve1toJiJD8IIVErt/dVuEUHVxGA== - dependencies: - buffer "^6.0.3" - neo4j-driver-core "5.12.0" - string_decoder "^1.3.0" - neo4j-driver-bolt-connection@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-bolt-connection/-/neo4j-driver-bolt-connection-4.4.10.tgz#a8b5b7f82b1d6f9a71a43eafcb0e21512ea24908" @@ -10453,11 +10444,6 @@ neo4j-driver-bolt-connection@^4.4.10: neo4j-driver-core "^4.4.10" string_decoder "^1.3.0" -neo4j-driver-core@5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-5.12.0.tgz#1f8616da7e945921574811368a68f5d2501bfd35" - integrity sha512-xBRi5oezysDUvtvBiIgBchzumkDZxvR9ol9sUtA9PBgVENeSmPH3CncitY8S979CFELS6wH7kydcjPLB4QMOzA== - neo4j-driver-core@^4.4.10: version "4.4.10" resolved "https://registry.yarnpkg.com/neo4j-driver-core/-/neo4j-driver-core-4.4.10.tgz#6f4c1ccc1199f864b149bdcef5e50e45ff95c29e" @@ -10473,15 +10459,6 @@ neo4j-driver@^4.4.5: neo4j-driver-core "^4.4.10" rxjs "^6.6.3" -neo4j-driver@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/neo4j-driver/-/neo4j-driver-5.12.0.tgz#1b2d7db1672ad224f0146542efee306a0a156a11" - integrity sha512-T2Vz63XDkL9TomM16dBusuXbo7d9SIGw2g3VR/rmrWTdbl1V1LYFx/u1P7AwBsFuX08oncKHfZwHGsWrCvdMyA== - dependencies: - neo4j-driver-bolt-connection "5.12.0" - neo4j-driver-core "5.12.0" - rxjs "^7.8.1" - next-tick@1, next-tick@^1.0.0, next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" @@ -12311,13 +12288,6 @@ rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: dependencies: tslib "^2.1.0" -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - sade@^1.7.3: version "1.8.1" resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" From a9668d8ecb3d72794c25ea3ad7a57c0d18d6f9a8 Mon Sep 17 00:00:00 2001 From: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Date: Thu, 7 Mar 2024 12:30:21 +0530 Subject: [PATCH 040/120] Disable form button until all parameters in given --- src/extensions/forms/chart/NeoForm.tsx | 11 ++++++++++- src/utils/parameterUtils.ts | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/utils/parameterUtils.ts diff --git a/src/extensions/forms/chart/NeoForm.tsx b/src/extensions/forms/chart/NeoForm.tsx index 9ae9c9109..b1608c644 100644 --- a/src/extensions/forms/chart/NeoForm.tsx +++ b/src/extensions/forms/chart/NeoForm.tsx @@ -7,6 +7,7 @@ import { REPORT_LOADING_ICON } from '../../../report/Report'; import debounce from 'lodash/debounce'; import { RUN_QUERY_DELAY_MS } from '../../../config/ReportConfig'; import NeoParameterSelectionChart from '../../../chart/parameter/ParameterSelectionChart'; +import { checkParametersNameInGlobalParameter, extractAllParameterNames } from '../../../utils/parameterUtils'; enum FormStatus { DATA_ENTRY = 0, // The user is filling in the form. @@ -42,6 +43,14 @@ const NeoForm = (props: ChartProps) => { }); } + const isParametersDefined = (cypherQuery: string | undefined) => { + const parameterNames = extractAllParameterNames(cypherQuery); + if (props.parameters) { + return checkParametersNameInGlobalParameter(parameterNames, props.parameters); + } + return false; + }; + useEffect(() => { // If the parameters change after the form is completed, reset it, as there might be another submission. if (status == FormStatus.SUBMITTED) { @@ -77,7 +86,7 @@ const NeoForm = (props: ChartProps) => { + >{outputValue} ); }; } From 88dbcc73170b7c9c4ee428fcb10a138de405211d Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Tue, 9 Apr 2024 15:03:55 +0200 Subject: [PATCH 049/120] Wrap text in tables --- public/style.css | 42 +++++++++++++++------------------- src/chart/table/TableChart.tsx | 8 ++++++- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/public/style.css b/public/style.css index 5896897bf..63cf9fca1 100644 --- a/public/style.css +++ b/public/style.css @@ -125,17 +125,13 @@ margin-top: -10px; } -.MuiDataGrid-virtualScroller { - overflow-y: hidden !important; -} - -.MuiDataGrid-panel{ +.MuiDataGrid-panel { translate: 0px -152%; } .MuiCard-root { - box-shadow: 0 0 #0000,0 0 #0000,var(--tw-shadow) !important; - box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow) !important; + box-shadow: 0 0 #0000, 0 0 #0000, var(--tw-shadow) !important; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; } .white-text { @@ -188,7 +184,6 @@ text-align: center; } - .card-view.expanded { position: absolute; top: 0; @@ -218,24 +213,23 @@ .card-view .MuiTablePagination-root { margin-top: 0px; - } @keyframes pulse { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7); - } + 0% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7); + } - 70% { - transform: scale(1); - box-shadow: 0 0 0 10px rgba(0, 0, 0, 0); - } + 70% { + transform: scale(1); + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0); + } - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); - } + 100% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); + } } /* Workaround for Needle not handling menu placement of dropdowns on modals */ @@ -247,14 +241,14 @@ /* End workaround */ /* Workaround for cleaning the Gantt chart UI */ -.gantt-wrapper > div > div:first-child > div:first-child > div:first-child > div> div:not(:first-child) { +.gantt-wrapper > div > div:first-child > div:first-child > div:first-child > div > div:not(:first-child) { display: none; } -.gantt-wrapper > div > div > div > div> div> div> div:not(:first-child) { +.gantt-wrapper > div > div > div > div > div > div > div:not(:first-child) { display: none; } /* End Gantt chart workaround */ .markdown-widget a { text-decoration: underline; -} \ No newline at end of file +} diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 7762d526b..b57d19ffe 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -262,7 +262,8 @@ export const NeoTableChart = (props: ChartProps) => { 'auto'} rows={rows} columns={columns} columnVisibilityModel={columnVisibilityModel} @@ -305,6 +306,11 @@ export const NeoTableChart = (props: ChartProps) => { }) .join(' '); }} + sx={{ + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, + '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, + '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, + }} /> From d5d78df3560f9342747c002bd9ba7bea16fb7d62 Mon Sep 17 00:00:00 2001 From: AleSim94 Date: Tue, 9 Apr 2024 15:30:00 +0200 Subject: [PATCH 050/120] added new scrollable bar(inline style) + more robust way to update users with special chars in their name like for example "@" and "<". --- src/extensions/rbac/RBACManagementMenu.tsx | 2 +- src/extensions/rbac/RBACUtils.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index 1a85b08fe..b5c20c0b3 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -64,7 +64,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti onClose={handleClose} size='small' > - + {roles.map((role) => ( handleRoleClicked(role)} icon={} title={role} /> ))} diff --git a/src/extensions/rbac/RBACUtils.ts b/src/extensions/rbac/RBACUtils.ts index 69e701bb9..c93d54e56 100644 --- a/src/extensions/rbac/RBACUtils.ts +++ b/src/extensions/rbac/RBACUtils.ts @@ -258,10 +258,11 @@ export function retrieveDatabaseList(driver, setDatabases: React.Dispatch `\`${user}\``).join(','); await runCypherQuery( driver, 'system', - `REVOKE ROLE ${currentRole} FROM ${allUsers.join(',')}`, + `REVOKE ROLE ${currentRole} FROM ${escapedAllUsers}`, {}, 1000, (status) => { @@ -277,10 +278,11 @@ export async function updateUsers(driver, currentRole, allUsers, selectedUsers, // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. // We build in an artificial delay... if (selectedUsers.length > 0) { + const escapedSelectedUsers = selectedUsers.map((user) => `\`${user}\``).join(','); await runCypherQuery( driver, 'system', - `GRANT ROLE ${currentRole} TO ${selectedUsers.join(',')}`, + `GRANT ROLE ${currentRole} TO ${escapedSelectedUsers}`, {}, 1000, (status) => { From ea97143d8928efeca050fc95a6ede5aa12571184 Mon Sep 17 00:00:00 2001 From: AleSim94 Date: Tue, 9 Apr 2024 18:05:51 +0200 Subject: [PATCH 051/120] chnaged the new scollable bar from inline styling to tailwind styling --- src/extensions/rbac/RBACManagementMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index b5c20c0b3..ed8f6e49e 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -64,7 +64,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti onClose={handleClose} size='small' > - + {roles.map((role) => ( handleRoleClicked(role)} icon={} title={role} /> ))} From 774dc7c138781ef3cc772b162965b1ab0a7508bb Mon Sep 17 00:00:00 2001 From: AleSim94 Date: Tue, 9 Apr 2024 18:11:51 +0200 Subject: [PATCH 052/120] just made it little bigger --- src/extensions/rbac/RBACManagementMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index ed8f6e49e..b37320098 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -64,7 +64,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti onClose={handleClose} size='small' > - + {roles.map((role) => ( handleRoleClicked(role)} icon={} title={role} /> ))} From 52e3438a0933bf35c57e641a8537436521d8d72e Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Wed, 10 Apr 2024 09:10:28 +0200 Subject: [PATCH 053/120] Wrap words --- src/chart/table/TableChart.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index b57d19ffe..2cebb9cdb 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -310,6 +310,7 @@ export const NeoTableChart = (props: ChartProps) => { '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, + '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, }} /> From cafc366103e0e9ccdbf555a5717891584279545b Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Wed, 10 Apr 2024 11:51:21 +0200 Subject: [PATCH 054/120] Render HTML strings --- package.json | 1 + .../graph/component/GraphEntityInspectionTable.tsx | 13 ++++++++----- src/chart/table/TableChart.tsx | 12 +++++++++++- src/report/ReportRecordProcessing.tsx | 4 +++- yarn.lock | 5 +++++ 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a5cc534df..13d16d0f2 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "d3-scale-chromatic": "^3.0.0", "dayjs": "^1.11.7", "dom-to-image": "^2.6.0", + "dompurify": "^3.1.0", "leaflet": "^1.7.1", "lodash.debounce": "^4.0.8", "lodash.isequal": "^4.5.0", diff --git a/src/chart/graph/component/GraphEntityInspectionTable.tsx b/src/chart/graph/component/GraphEntityInspectionTable.tsx index 62801204f..0349f102e 100644 --- a/src/chart/graph/component/GraphEntityInspectionTable.tsx +++ b/src/chart/graph/component/GraphEntityInspectionTable.tsx @@ -2,16 +2,19 @@ import React from 'react'; import ShowMoreText from 'react-show-more-text'; import { Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material'; import { TextLink } from '@neo4j-ndl/react'; +import DOMPurify from 'dompurify'; export const formatProperty = (property) => { - if (property.startsWith('http://') || property.startsWith('https://')) { + const str = property?.toString() || ''; + if (str.startsWith('http://') || str.startsWith('https://')) { return ( - - {property} + + {str} ); } - return property; + const cleanValue = DOMPurify.sanitize(str); + return
    ; }; /** @@ -88,7 +91,7 @@ export const GraphEntityInspectionTable = ({ {key} - {formatProperty(entity && entity.properties[key].toString())} + {formatProperty(entity && entity.properties[key])} {checklistEnabled ? ( diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 7762d526b..61d2ac9c2 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -23,6 +23,7 @@ import { ThemeProvider, createTheme } from '@mui/material/styles'; import Button from '@mui/material/Button'; import { extensionEnabled } from '../../utils/ReportUtils'; import { getCheckboxes, hasCheckboxes, updateCheckBoxes } from './TableActionsHelper'; +import DOMPurify from 'dompurify'; const TABLE_HEADER_HEIGHT = 32; const TABLE_FOOTER_HEIGHT = 62; @@ -38,6 +39,15 @@ const fallbackRenderer = (value) => { return JSON.stringify(value); }; +function htmlToPlainText(html): string { + // Create a temporary div element to hold the sanitized HTML content + const tempElement = document.createElement('div'); + // Set the HTML content directly as innerHTML of the temporary element + tempElement.innerHTML = html.props.dangerouslySetInnerHTML.__html; + // Extract plain text using textContent + return tempElement.textContent || ''; +} + function renderAsButtonWrapper(renderer) { return function renderAsButton(value) { const outputValue = renderer(value, true); @@ -50,7 +60,7 @@ function renderAsButtonWrapper(renderer) { style={{ width: '100%', marginLeft: '5px', marginRight: '5px' }} variant='contained' color='primary' - >{`${outputValue}`} + >{`${htmlToPlainText(outputValue)}`} ); }; } diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 1109d1e3a..3c5ac01ee 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -10,6 +10,7 @@ import { valueIsPath, valueIsRelationship, } from '../chart/ChartUtils'; +import DOMPurify from 'dompurify'; /** * Collects all node labels and node properties in a set of Neo4j records. @@ -266,7 +267,8 @@ function RenderString(value) { ); } - return str; + const cleanValue = DOMPurify.sanitize(str); + return
    ; } function RenderLink(value, disabled = false) { diff --git a/yarn.lock b/yarn.lock index d9935f9e9..2e254bea7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7068,6 +7068,11 @@ dom-to-image@^2.6.0: resolved "https://registry.yarnpkg.com/dom-to-image/-/dom-to-image-2.6.0.tgz#8a503608088c87b1c22f9034ae032e1898955867" integrity sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA== +dompurify@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.1.0.tgz#8c6b9fe986969a33aa4686bd829cbe8e14dd9445" + integrity sha512-yoU4rhgPKCo+p5UrWWWNKiIq+ToGqmVVhk0PmMYBK4kRsR3/qhemNFL8f6CFmBd4gMwm3F4T7HBoydP5uY07fA== + dotenv@^16.3.1: version "16.3.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" From 0d24ec0c3399358b8d41653bd68853ab7af632ce Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Wed, 10 Apr 2024 12:16:31 +0200 Subject: [PATCH 055/120] Disable auto-sorting for Cypher Parameter Select --- src/chart/parameter/ParameterSelectionChart.tsx | 3 +++ .../parameter/component/NodePropertyParameterSelect.tsx | 7 +++++-- src/chart/parameter/component/ParameterSelect.ts | 4 ++++ src/chart/parameter/component/QueryParameterSelect.tsx | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/chart/parameter/ParameterSelectionChart.tsx b/src/chart/parameter/ParameterSelectionChart.tsx index bb48334b0..56a67ea09 100644 --- a/src/chart/parameter/ParameterSelectionChart.tsx +++ b/src/chart/parameter/ParameterSelectionChart.tsx @@ -94,6 +94,7 @@ export const NeoParameterSelectionChart = (props: ChartProps) => { compatibilityMode={compatibilityMode} multiSelector={multiSelector} manualParameterSave={manualParameterSave} + autoSort={true} /> ); } else if (type == 'Relationship Property') { @@ -112,6 +113,7 @@ export const NeoParameterSelectionChart = (props: ChartProps) => { compatibilityMode={compatibilityMode} multiSelector={multiSelector} manualParameterSave={manualParameterSave} + autoSort={true} /> ); } else if (type == 'Date Picker') { @@ -147,6 +149,7 @@ export const NeoParameterSelectionChart = (props: ChartProps) => { compatibilityMode={compatibilityMode} multiSelector={multiSelector} manualParameterSave={manualParameterSave} + autoSort={false} /> ); } diff --git a/src/chart/parameter/component/NodePropertyParameterSelect.tsx b/src/chart/parameter/component/NodePropertyParameterSelect.tsx index 29d79ae28..4972ff225 100644 --- a/src/chart/parameter/component/NodePropertyParameterSelect.tsx +++ b/src/chart/parameter/component/NodePropertyParameterSelect.tsx @@ -165,12 +165,14 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { /> ); } + let options = extraRecords?.map((r) => r?._fields?.[displayValueRowIndex] || '(no data)'); + options = props.autoSort ? options.sort() : options; return (
    r?._fields?.[displayValueRowIndex] || '(no data)').sort()} + options={options} disabled={disabled} limitTags={multiSelectLimit} style={{ @@ -198,7 +200,8 @@ const NodePropertyParameterSelectComponent = (props: ParameterSelectProps) => { if (autoSelectFirstValue && paramValueDisplayLocal == '') { debouncedQueryCallback(props.query, { input: '', ...allParameters }, (records) => { if (records && records.length > 0 && records[0] && records[0]._fields) { - const values = records?.map((r) => r?._fields?.[displayValueRowIndex] || '(no data)').sort(); + let values = records?.map((r) => r?._fields?.[displayValueRowIndex] || '(no data)'); + values = props.autoSort ? values.sort() : values; setExtraRecords(records); propagateSelection(undefined, values[0]); } diff --git a/src/chart/parameter/component/ParameterSelect.ts b/src/chart/parameter/component/ParameterSelect.ts index 2d9cf9966..54e9f2a67 100644 --- a/src/chart/parameter/component/ParameterSelect.ts +++ b/src/chart/parameter/component/ParameterSelect.ts @@ -62,4 +62,8 @@ export interface ParameterSelectProps { * Add the possibility for manual selection confirmation */ manualParameterSave?: boolean; + /** + * Pass true if results should be sorted automatically + */ + autoSort?: boolean; } diff --git a/src/chart/parameter/component/QueryParameterSelect.tsx b/src/chart/parameter/component/QueryParameterSelect.tsx index e4fdeb807..125c10532 100644 --- a/src/chart/parameter/component/QueryParameterSelect.tsx +++ b/src/chart/parameter/component/QueryParameterSelect.tsx @@ -17,6 +17,7 @@ const QueryParameterSelectComponent = (props: ParameterSelectProps) => { allParameters={props.allParameters} compatibilityMode={props.compatibilityMode} multiSelector={props.multiSelector} + autoSort={props.autoSort} /> ); }; From 6416b0672c6feea33d1ca57f20663a8ebfd8c3b6 Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 11 Apr 2024 12:39:25 +0200 Subject: [PATCH 056/120] cleaning according to sonarqube --- src/chart/graph/component/GraphEntityInspectionTable.tsx | 2 +- src/chart/table/TableChart.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/chart/graph/component/GraphEntityInspectionTable.tsx b/src/chart/graph/component/GraphEntityInspectionTable.tsx index 0349f102e..6aee24f3c 100644 --- a/src/chart/graph/component/GraphEntityInspectionTable.tsx +++ b/src/chart/graph/component/GraphEntityInspectionTable.tsx @@ -91,7 +91,7 @@ export const GraphEntityInspectionTable = ({ {key} - {formatProperty(entity && entity.properties[key])} + {formatProperty(entity?.properties[key])} {checklistEnabled ? ( diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 61d2ac9c2..ecbf9c39b 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -23,7 +23,6 @@ import { ThemeProvider, createTheme } from '@mui/material/styles'; import Button from '@mui/material/Button'; import { extensionEnabled } from '../../utils/ReportUtils'; import { getCheckboxes, hasCheckboxes, updateCheckBoxes } from './TableActionsHelper'; -import DOMPurify from 'dompurify'; const TABLE_HEADER_HEIGHT = 32; const TABLE_FOOTER_HEIGHT = 62; @@ -45,7 +44,7 @@ function htmlToPlainText(html): string { // Set the HTML content directly as innerHTML of the temporary element tempElement.innerHTML = html.props.dangerouslySetInnerHTML.__html; // Extract plain text using textContent - return tempElement.textContent || ''; + return tempElement.textContent ?? ''; } function renderAsButtonWrapper(renderer) { From ec61cb1762ba55b6753618b8fc2b12b499c396a0 Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Thu, 11 Apr 2024 13:17:23 +0200 Subject: [PATCH 057/120] shrinking menu lenght --- src/extensions/rbac/RBACManagementMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/rbac/RBACManagementMenu.tsx b/src/extensions/rbac/RBACManagementMenu.tsx index b37320098..31ec37f81 100644 --- a/src/extensions/rbac/RBACManagementMenu.tsx +++ b/src/extensions/rbac/RBACManagementMenu.tsx @@ -64,7 +64,7 @@ export const RBACManagementMenu = ({ anchorEl, MenuOpen, handleClose, createNoti onClose={handleClose} size='small' > - + {roles.map((role) => ( handleRoleClicked(role)} icon={} title={role} /> ))} From 28cc5a61b7c45f4d369099679636b33ba6c7bf47 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 22 Apr 2024 10:14:58 +0200 Subject: [PATCH 058/120] Fix padding in compact table with report actions --- src/chart/table/TableChart.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index cd5ade78c..ea055cedd 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -317,6 +317,7 @@ export const NeoTableChart = (props: ChartProps) => { }} sx={{ '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, From ae7e3e59c6b3c881b81a2bc005bb67ca078eedd9 Mon Sep 17 00:00:00 2001 From: LiamEdwardsLamarche Date: Mon, 22 Apr 2024 09:38:54 +0100 Subject: [PATCH 059/120] html render rollback due to too many bugs --- .../component/GraphEntityInspectionTable.tsx | 12 ++++++++---- src/chart/table/TableChart.tsx | 19 ++++++++++--------- src/report/ReportRecordProcessing.tsx | 8 +++++--- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/chart/graph/component/GraphEntityInspectionTable.tsx b/src/chart/graph/component/GraphEntityInspectionTable.tsx index 6aee24f3c..dd21e8182 100644 --- a/src/chart/graph/component/GraphEntityInspectionTable.tsx +++ b/src/chart/graph/component/GraphEntityInspectionTable.tsx @@ -2,7 +2,7 @@ import React from 'react'; import ShowMoreText from 'react-show-more-text'; import { Checkbox, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material'; import { TextLink } from '@neo4j-ndl/react'; -import DOMPurify from 'dompurify'; +// import DOMPurify from 'dompurify'; export const formatProperty = (property) => { const str = property?.toString() || ''; @@ -13,8 +13,11 @@ export const formatProperty = (property) => { ); } - const cleanValue = DOMPurify.sanitize(str); - return
    ; + return property; + + // html render rollback + // const cleanValue = DOMPurify.sanitize(str); + // return
    ; }; /** @@ -91,7 +94,8 @@ export const GraphEntityInspectionTable = ({ {key} - {formatProperty(entity?.properties[key])} + {formatProperty(entity && entity.properties[key].toString())} + {/* {formatProperty(entity?.properties[key])} */} {checklistEnabled ? ( diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index cd5ade78c..c25acfe0a 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -38,14 +38,15 @@ const fallbackRenderer = (value) => { return JSON.stringify(value); }; -function htmlToPlainText(html): string { - // Create a temporary div element to hold the sanitized HTML content - const tempElement = document.createElement('div'); - // Set the HTML content directly as innerHTML of the temporary element - tempElement.innerHTML = html.props.dangerouslySetInnerHTML.__html; - // Extract plain text using textContent - return tempElement.textContent ?? ''; -} +// html Render Rollback +// function htmlToPlainText(html): string { +// // Create a temporary div element to hold the sanitized HTML content +// const tempElement = document.createElement('div'); +// // Set the HTML content directly as innerHTML of the temporary element +// tempElement.innerHTML = html.props.dangerouslySetInnerHTML.__html; +// // Extract plain text using textContent +// return tempElement.textContent ?? ''; +// } function renderAsButtonWrapper(renderer) { return function renderAsButton(value) { @@ -59,7 +60,7 @@ function renderAsButtonWrapper(renderer) { style={{ width: '100%', marginLeft: '5px', marginRight: '5px' }} variant='contained' color='primary' - >{`${htmlToPlainText(outputValue)}`} + >{outputValue} ); }; } diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 3c5ac01ee..5d797cd4f 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -10,7 +10,7 @@ import { valueIsPath, valueIsRelationship, } from '../chart/ChartUtils'; -import DOMPurify from 'dompurify'; +// import DOMPurify from 'dompurify'; /** * Collects all node labels and node properties in a set of Neo4j records. @@ -267,8 +267,10 @@ function RenderString(value) { ); } - const cleanValue = DOMPurify.sanitize(str); - return
    ; + return str; + // html render rollback + // const cleanValue = DOMPurify.sanitize(str); + // return
    ; } function RenderLink(value, disabled = false) { From a2814068805297062cedac88c331a1bc7f0f878b Mon Sep 17 00:00:00 2001 From: LiamEdwardsLamarche Date: Mon, 22 Apr 2024 09:52:38 +0100 Subject: [PATCH 060/120] fixes typo --- src/chart/graph/component/GraphEntityInspectionTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chart/graph/component/GraphEntityInspectionTable.tsx b/src/chart/graph/component/GraphEntityInspectionTable.tsx index dd21e8182..eefb6f90d 100644 --- a/src/chart/graph/component/GraphEntityInspectionTable.tsx +++ b/src/chart/graph/component/GraphEntityInspectionTable.tsx @@ -13,7 +13,7 @@ export const formatProperty = (property) => { ); } - return property; + return str; // html render rollback // const cleanValue = DOMPurify.sanitize(str); From 62cf070fcb417a0fde58ec86e1dc77ab1f80be92 Mon Sep 17 00:00:00 2001 From: LiamEdwardsLamarche Date: Mon, 22 Apr 2024 10:08:31 +0100 Subject: [PATCH 061/120] code cleanup --- .../graph/component/GraphEntityInspectionTable.tsx | 7 +------ src/chart/table/TableChart.tsx | 10 ---------- src/report/ReportRecordProcessing.tsx | 3 --- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/chart/graph/component/GraphEntityInspectionTable.tsx b/src/chart/graph/component/GraphEntityInspectionTable.tsx index eefb6f90d..562fbbaec 100644 --- a/src/chart/graph/component/GraphEntityInspectionTable.tsx +++ b/src/chart/graph/component/GraphEntityInspectionTable.tsx @@ -14,10 +14,6 @@ export const formatProperty = (property) => { ); } return str; - - // html render rollback - // const cleanValue = DOMPurify.sanitize(str); - // return
    ; }; /** @@ -94,8 +90,7 @@ export const GraphEntityInspectionTable = ({ {key} - {formatProperty(entity && entity.properties[key].toString())} - {/* {formatProperty(entity?.properties[key])} */} + {formatProperty(entity?.properties[key])} {checklistEnabled ? ( diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index ab3ba822c..c6bdf3637 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -38,16 +38,6 @@ const fallbackRenderer = (value) => { return JSON.stringify(value); }; -// html Render Rollback -// function htmlToPlainText(html): string { -// // Create a temporary div element to hold the sanitized HTML content -// const tempElement = document.createElement('div'); -// // Set the HTML content directly as innerHTML of the temporary element -// tempElement.innerHTML = html.props.dangerouslySetInnerHTML.__html; -// // Extract plain text using textContent -// return tempElement.textContent ?? ''; -// } - function renderAsButtonWrapper(renderer) { return function renderAsButton(value) { const outputValue = renderer(value, true); diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 5d797cd4f..726beaebe 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -268,9 +268,6 @@ function RenderString(value) { ); } return str; - // html render rollback - // const cleanValue = DOMPurify.sanitize(str); - // return
    ; } function RenderLink(value, disabled = false) { From eb05802d79416f9bd8a67bbaec640ce20a5e38e8 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 22 Apr 2024 17:11:44 +0200 Subject: [PATCH 062/120] Update release notes 2.4.5 --- release-notes.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/release-notes.md b/release-notes.md index 2b364ba45..2c8fb27d3 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,8 +1,11 @@ -## NeoDash 2.4.4 -This is a hotfix release fixing some breaking issues in the 2.4.3: -- Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) -- Reverted new connection handler for auto-renewed SSO sessions. [815](https://github.com/neo4j-labs/neodash/pull/815) -- Improved handling of parameters in form extension, resolved local state issues. [813](https://github.com/neo4j-labs/neodash/pull/813) -- Updated Role management extension to no longer execute queries in parallel, improved UX and error handling [813](https://github.com/neo4j-labs/neodash/pull/813) +## NeoDash 2.4.5 +This is a small release containing a few fixes: +- Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) +- Allowed text to wrap in tables, preserving the number of rows [852](https://github.com/neo4j-labs/neodash/pull/852) +- Disabled auto-sorting of Cypher query-based Parameter Select ; use Cypher ORDER BY to control result order [857](https://github.com/neo4j-labs/neodash/pull/857) +- Updated role selector menu, and made user updates more robust [854](https://github.com/neo4j-labs/neodash/pull/854) -If you are currently using NeoDash version 2.4.3, we recommend updating as soon as possible. \ No newline at end of file +Thanks to all the contributors for this release: +- [MariusC](https://github.com/mariusconjeaud), +- [LiamEdwardsLamarche](https://github.com/LiamEdwardsLamarche), +- [AleSim94](https://github.com/AleSim94) \ No newline at end of file From 2adc6e873b6ca18ce55e357aee0532fc82931d20 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 22 Apr 2024 17:41:34 +0200 Subject: [PATCH 063/120] Update version tags --- .github/workflows/master-deployment.yml | 6 +++--- Dockerfile | 2 +- changelog.md | 12 ++++++++++++ .../ROOT/pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- src/modal/AboutModal.tsx | 2 +- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index a8a966f2a..8838807ac 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -31,7 +31,7 @@ jobs: with: build: yarn run build start: yarn run dev - wait-on: "http://localhost:3000" + wait-on: 'http://localhost:3000' browser: chrome build-s3: needs: build-test @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.4 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.5 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.4 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.5 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 5ba5230bd..0bbdf284b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.4" +LABEL version="2.4.5" diff --git a/changelog.md b/changelog.md index c80e24157..b34b6d2bd 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,15 @@ +## NeoDash 2.4.5 +This is a small release containing a few fixes: +- Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) +- Allowed text to wrap in tables, preserving the number of rows [852](https://github.com/neo4j-labs/neodash/pull/852) +- Disabled auto-sorting of Cypher query-based Parameter Select ; use Cypher ORDER BY to control result order [857](https://github.com/neo4j-labs/neodash/pull/857) +- Updated role selector menu, and made user updates more robust [854](https://github.com/neo4j-labs/neodash/pull/854) + +Thanks to all the contributors for this release: +- [MariusC](https://github.com/mariusconjeaud), +- [LiamEdwardsLamarche](https://github.com/LiamEdwardsLamarche), +- [AleSim94](https://github.com/AleSim94) + ## NeoDash 2.4.4 This is a hotfix release fixing some breaking issues in the 2.4.3: - Fixed number parsing using newer versions of the Neo4j driver. [811](https://github.com/neo4j-labs/neodash/pull/811) diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index d77d7e8b6..1b7d4a371 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.4 username@host:/usr/share/nginx/html +scp neodash-2.4.5 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index 13d16d0f2..f15e63413 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.4", + "version": "2.4.5", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index d3e8d663f..8c1be47e5 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.4'; +export const version = '2.4.5'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From eb046c7e9fd29553df0b816711f7a30260b121a3 Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Tue, 23 Apr 2024 17:54:32 +0200 Subject: [PATCH 064/120] fixing casting error at while loading the dashboards, to check when we load the dashboard from the db --- src/application/ApplicationThunks.ts | 3 --- src/chart/ChartUtils.ts | 6 +++--- src/dashboard/DashboardThunks.ts | 3 +-- src/extensions/advancedcharts/Utils.ts | 3 +-- src/settings/SettingsThunks.ts | 6 ++++-- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index fc880fd3a..13e35561d 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -14,7 +14,6 @@ import { createNotificationThunk } from '../page/PageThunks'; import { runCypherQuery } from '../report/ReportQueryRunner'; import { setPageNumberThunk, - updateParametersToNeo4jTypeThunk, updateGlobalParametersThunk, updateSessionParameterThunk, } from '../settings/SettingsThunks'; @@ -499,8 +498,6 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: ); } } - // At the load of a dashboard, we want to ensure correct casting types - dispatch(updateParametersToNeo4jTypeThunk()); // SSO - specific case starts here. if (state.application.waitForSSO) { diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index 1ff72b7f6..c88afe17a 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -220,7 +220,7 @@ export function replaceDashboardParameters(str, parameters) { let type = getRecordType(val); // Arrays weren't playing nicely with RenderSubValue(). Each object would be passed separately and return [oject Object]. - if (type === 'string' || type == 'link' ) { + if (type === 'string' || type == 'link') { return val; } else if (type === 'array') { return RenderSubValue(val.join(', ')); @@ -415,7 +415,7 @@ export function isCastableToNeo4jDate(value: object) { return false; } let keys = Object.keys(value); - return keys.length == 3 && keys.includes('day') && keys.includes('month') && keys.includes('year'); + return keys.includes('day') && keys.includes('month') && keys.includes('year'); } /** @@ -425,7 +425,7 @@ export function isCastableToNeo4jDate(value: object) { */ export function castToNeo4jDate(value: object) { if (isCastableToNeo4jDate(value)) { - return new Neo4jDate(value.year, value.month, value.day); + return new Neo4jDate(toNumber(value.year), toNumber(value.month), toNumber(value.day)); } throw new Error(`Invalid input for castToNeo4jDate: ${value}`); } diff --git a/src/dashboard/DashboardThunks.ts b/src/dashboard/DashboardThunks.ts index 2ab54e614..398c1f159 100644 --- a/src/dashboard/DashboardThunks.ts +++ b/src/dashboard/DashboardThunks.ts @@ -3,7 +3,7 @@ import { updateDashboardSetting } from '../settings/SettingsActions'; import { addPage, movePage, removePage, resetDashboardState, setDashboard, setDashboardUuid } from './DashboardActions'; import { QueryStatus, runCypherQuery } from '../report/ReportQueryRunner'; import { setDraft, setParametersToLoadAfterConnecting, setWelcomeScreenOpen } from '../application/ApplicationActions'; -import { updateGlobalParametersThunk, updateParametersToNeo4jTypeThunk } from '../settings/SettingsThunks'; +import { updateGlobalParametersThunk } from '../settings/SettingsThunks'; import { createUUID } from '../utils/uuid'; import { createLogThunk } from '../application/logging/LoggingThunk'; import { applicationGetConnectionUser, applicationIsStandalone } from '../application/ApplicationSelectors'; @@ -141,7 +141,6 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any) dispatch(updateGlobalParametersThunk(application.parametersToLoadAfterConnecting)); dispatch(setParametersToLoadAfterConnecting(null)); - dispatch(updateParametersToNeo4jTypeThunk()); // Pre-2.3.4 dashboards might now always have a UUID. Set it if not present. if (!dashboard.uuid) { diff --git a/src/extensions/advancedcharts/Utils.ts b/src/extensions/advancedcharts/Utils.ts index aa7c1f840..647223918 100644 --- a/src/extensions/advancedcharts/Utils.ts +++ b/src/extensions/advancedcharts/Utils.ts @@ -1,7 +1,6 @@ import { valueIsArray } from '../../chart/ChartUtils'; -import { useDispatch, useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; import { getPageNumbersAndNames } from '../../dashboard/DashboardSelectors'; -import { updateDashboardSetting } from '../../settings/SettingsActions'; export const getRule = (e, rules, type) => { let r = getRuleWithFieldPropertyName(e, rules, type, null); diff --git a/src/settings/SettingsThunks.ts b/src/settings/SettingsThunks.ts index 267911ae5..9a225089d 100644 --- a/src/settings/SettingsThunks.ts +++ b/src/settings/SettingsThunks.ts @@ -1,6 +1,6 @@ import { setSessionParameters } from '../application/ApplicationActions'; import { hardResetCardSettings } from '../card/CardActions'; -import { castToNeo4jDate, isCastableToNeo4jDate, valueIsNode } from '../chart/ChartUtils'; +import { castToNeo4jDate, isCastableToNeo4jDate, toNumber, valueIsNode } from '../chart/ChartUtils'; import { createNotificationThunk } from '../page/PageThunks'; import { updateDashboardSetting } from './SettingsActions'; @@ -73,6 +73,7 @@ export const updateGlobalParametersThunk = (newParameters) => (dispatch: any, ge } }); dispatch(updateDashboardSetting('parameters', { ...parameters })); + dispatch(updateParametersToNeo4jTypeThunk()); } } catch (e) { dispatch(createNotificationThunk('Unable to update global parameters', e)); @@ -86,12 +87,13 @@ export const updateParametersToNeo4jTypeThunk = () => (dispatch: any, getState: try { const { settings } = getState().dashboard; const parameters = settings.parameters ? settings.parameters : {}; - // if new parameters are set... // iterate over the key value pairs in parameters Object.keys(parameters).forEach((key) => { if (isCastableToNeo4jDate(parameters[key])) { parameters[key] = castToNeo4jDate(parameters[key]); + } else if (parameters[key] && typeof toNumber(parameters[key]) === 'number') { + parameters[key] = toNumber(parameters[key]); } else if (parameters[key] == undefined) { delete parameters[key]; } From 333d9a88294817061d0ce2b9d3a95c3c3bcb95ae Mon Sep 17 00:00:00 2001 From: Alfred Rubin Date: Wed, 24 Apr 2024 01:02:50 +0200 Subject: [PATCH 065/120] fixing casting at loading --- src/application/ApplicationThunks.ts | 2 +- src/dashboard/DashboardThunks.ts | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index 13e35561d..97b04821d 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -639,8 +639,8 @@ export const initializeApplicationAsStandaloneThunk = } else { dispatch(setDashboardToLoadAfterConnecting(`name:${config.standaloneDashboardName}`)); } - dispatch(setParametersToLoadAfterConnecting(paramsToSetAfterConnecting)); + dispatch(updateGlobalParametersThunk(paramsToSetAfterConnecting)); if (clearNotificationAfterLoad) { dispatch(clearNotification()); diff --git a/src/dashboard/DashboardThunks.ts b/src/dashboard/DashboardThunks.ts index 398c1f159..3ef4e62bf 100644 --- a/src/dashboard/DashboardThunks.ts +++ b/src/dashboard/DashboardThunks.ts @@ -9,7 +9,6 @@ import { createLogThunk } from '../application/logging/LoggingThunk'; import { applicationGetConnectionUser, applicationIsStandalone } from '../application/ApplicationSelectors'; import { applicationGetLoggingSettings } from '../application/logging/LoggingSelectors'; import { NEODASH_VERSION, VERSION_TO_MIGRATE } from './DashboardReducer'; -import { Date as Neo4jDate } from 'neo4j-driver-core/lib/temporal-types.js'; export const removePageThunk = (number) => (dispatch: any, getState: any) => { try { @@ -113,16 +112,6 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any) throw `Invalid dashboard version: ${dashboard.version}. Try restarting the application, or retrieve your cached dashboard using a debug report.`; } - // Cast dashboard parameters from serialized format to correct types - Object.keys(dashboard.settings.parameters).forEach((key) => { - const value = dashboard.settings.parameters[key]; - - // Serialized Date to Neo4jDate - if (value && value.year && value.month && value.day) { - dashboard.settings.parameters[key] = new Neo4jDate(value.year, value.month, value.day); - } - }); - // Reverse engineer the minimal set of fields from the selection loaded. dashboard.pages.forEach((p) => { p.reports.forEach((r) => { @@ -140,8 +129,8 @@ export const loadDashboardThunk = (uuid, text) => (dispatch: any, getState: any) const { application } = getState(); dispatch(updateGlobalParametersThunk(application.parametersToLoadAfterConnecting)); + dispatch(updateGlobalParametersThunk(dashboard.settings.parameters)); dispatch(setParametersToLoadAfterConnecting(null)); - // Pre-2.3.4 dashboards might now always have a UUID. Set it if not present. if (!dashboard.uuid) { dispatch(setDashboardUuid(uuid)); From 53c5e1d10c00a439f6302891a7a73932663f7cfe Mon Sep 17 00:00:00 2001 From: MariusC Date: Fri, 26 Apr 2024 11:47:40 +0200 Subject: [PATCH 066/120] Make wrapping in table optional, enabled by default (#872) * Make wrapping in table optional, enabled by default * Make wrapping disabled by default --------- Co-authored-by: Marius Conjeaud --- src/chart/table/TableChart.tsx | 122 +++++++++++++++++---------------- src/config/ReportConfig.tsx | 6 ++ 2 files changed, 68 insertions(+), 60 deletions(-) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index c6bdf3637..58e54e71f 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -46,11 +46,9 @@ function renderAsButtonWrapper(renderer) { return <>; } return ( - + ); }; } @@ -73,6 +71,7 @@ export const generateSafeColumnKey = (key) => { export const NeoTableChart = (props: ChartProps) => { const transposed = props.settings && props.settings.transposed ? props.settings.transposed : false; + const wrapContent = props.settings && props.settings.wrapContent ? props.settings.wrapContent : false; const allowDownload = props.settings && props.settings.allowDownload !== undefined ? props.settings.allowDownload : false; @@ -214,6 +213,49 @@ export const NeoTableChart = (props: ChartProps) => { : Math.floor(availableRowHeight) - pageSizeReducer; const pageNames = getPageNumbersAndNamesList(); + const commonGridProps = { + key: 'tableKey', + headerHeight: 32, + density: compact ? 'compact' : 'standard', + rows: rows, + columns: columns, + columnVisibilityModel: columnVisibilityModel, + onColumnVisibilityModelChange: (newModel) => setColumnVisibilityModel(newModel), + onCellClick: (e) => performActionOnElement(e, actionsRules, { ...props, pageNames: pageNames }, 'Click', 'Table'), + onCellDoubleClick: (e) => { + let rules = getRule(e, actionsRules, 'doubleClick'); + if (rules !== null) { + rules.forEach((rule) => executeActionRule(rule, e, { ...props, pageNames: pageNames }, 'table')); + } else { + setNotificationOpen(true); + navigator.clipboard.writeText(e.value); + } + }, + checkboxSelection: hasCheckboxes(actionsRules), + selectionModel: getCheckboxes(actionsRules, rows, props.getGlobalParameter), + onSelectionModelChange: (selection) => updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter), + pageSize: tablePageSize > 0 ? tablePageSize : 5, + rowsPerPageOptions: rows.length < 5 ? [rows.length, 5] : [5], + disableSelectionOnClick: true, + components: { + ColumnSortedDescendingIcon: () => <>, + ColumnSortedAscendingIcon: () => <>, + }, + getRowClassName: (params) => { + return ['row color', 'row text color'] + .map((e) => { + return `rule${evaluateRulesOnDict(params.row, styleRules, [e])}`; + }) + .join(' '); + }, + getCellClassName: (params) => { + return ['cell color', 'cell text color'] + .map((e) => { + return `rule${evaluateRulesOnDict({ [params.field]: params.value }, styleRules, [e])}`; + }) + .join(' '); + }, + }; return ( @@ -259,61 +301,21 @@ export const NeoTableChart = (props: ChartProps) => { <> )} - 'auto'} - rows={rows} - columns={columns} - columnVisibilityModel={columnVisibilityModel} - onColumnVisibilityModelChange={(newModel) => setColumnVisibilityModel(newModel)} - onCellClick={(e) => - performActionOnElement(e, actionsRules, { ...props, pageNames: pageNames }, 'Click', 'Table') - } - onCellDoubleClick={(e) => { - let rules = getRule(e, actionsRules, 'doubleClick'); - if (rules !== null) { - rules.forEach((rule) => executeActionRule(rule, e, { ...props, pageNames: pageNames }, 'table')); - } else { - setNotificationOpen(true); - navigator.clipboard.writeText(e.value); - } - }} - checkboxSelection={hasCheckboxes(actionsRules)} - selectionModel={getCheckboxes(actionsRules, rows, props.getGlobalParameter)} - onSelectionModelChange={(selection) => - updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter) - } - pageSize={tablePageSize > 0 ? tablePageSize : 5} - rowsPerPageOptions={rows.length < 5 ? [rows.length, 5] : [5]} - disableSelectionOnClick - components={{ - ColumnSortedDescendingIcon: () => <>, - ColumnSortedAscendingIcon: () => <>, - }} - getRowClassName={(params) => { - return ['row color', 'row text color'] - .map((e) => { - return `rule${evaluateRulesOnDict(params.row, styleRules, [e])}`; - }) - .join(' '); - }} - getCellClassName={(params) => { - return ['cell color', 'cell text color'] - .map((e) => { - return `rule${evaluateRulesOnDict({ [params.field]: params.value }, styleRules, [e])}`; - }) - .join(' '); - }} - sx={{ - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, - '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, - '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, - '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, - }} - /> + {wrapContent ? ( + 'auto'} + sx={{ + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, + '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, + '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, + '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, + }} + /> + ) : ( + + )}
    ); diff --git a/src/config/ReportConfig.tsx b/src/config/ReportConfig.tsx index e9270c314..97b6bc913 100644 --- a/src/config/ReportConfig.tsx +++ b/src/config/ReportConfig.tsx @@ -46,6 +46,12 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, + wrapContent: { + label: 'Wrap overflowing content', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, columnWidthsType: { label: 'Column Widths Specification', type: SELECTION_TYPES.LIST, From 308afdeb7770f0739adf6075ee875acb189fd928 Mon Sep 17 00:00:00 2001 From: MariusC Date: Fri, 26 Apr 2024 11:47:51 +0200 Subject: [PATCH 067/120] Fix bad wrapping for arrays (#868) * Fix bad wrapping for arrays * Add space for array display --------- Co-authored-by: Marius Conjeaud --- src/report/ReportRecordProcessing.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 726beaebe..f30908577 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -247,12 +247,15 @@ function RenderPath(value) { } function RenderArray(value) { + if (value.length > 0 && !valueIsNode(value[0]) && !valueIsRelationship(value[0])) { + return RenderString(value.join(', ')); + } const mapped = value.map((v, i) => { return ( -
    + {RenderSubValue(v)} {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? : <>} -
    + ); }); return mapped; From 43c9463578e3bb03f073b40f9e9f4c45656ce282 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 26 Apr 2024 11:48:10 +0200 Subject: [PATCH 068/120] Fixed issues where cross database dashboard sharing always reverted back to the default database (#873) * Fixed issues where cross database dashboard sharing always reverted back to the default database * Fix code smell from SonarQube --- src/application/ApplicationActions.ts | 2 +- src/application/ApplicationThunks.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 0b556f2dc..b8fe3d063 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -178,7 +178,7 @@ export const setStandaloneEnabled = ( export const SET_STANDALONE_MODE = 'APPLICATION/SET_STANDALONE_MODE'; export const setStandaloneMode = (standalone: boolean) => ({ - type: SET_STANDALONE_ENABLED, + type: SET_STANDALONE_MODE, payload: { standalone }, }); diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index fc880fd3a..e3ddc8ce0 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -259,7 +259,10 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { const skipConfirmation = urlParams.get('skipConfirmation') == 'Yes'; const dashboardDatabase = urlParams.get('dashboardDatabase'); - dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); + if (dashboardDatabase) { + dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); + } + if (urlParams.get('credentials')) { setWelcomeScreenOpen(false); const connection = decodeURIComponent(urlParams.get('credentials')); @@ -363,6 +366,8 @@ export const onConfirmLoadSharedDashboardThunk = () => (dispatch: any, getState: if (shareDetails.dashboardDatabase) { dispatch(setStandaloneDashboardDatabase(shareDetails.dashboardDatabase)); + } else if (!state.application.standaloneDashboardDatabase) { + // No standalone dashboard database configured, fall back to default dispatch(setStandaloneDashboardDatabase(shareDetails.database)); } if (shareDetails.url) { @@ -452,6 +457,9 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setSSOProviders(config.ssoProviders)); const { standalone } = config; + // if a dashboard database was previously set, remember to use it. + const dashboardDatabase = state.application.standaloneDashboardDatabase; + dispatch( setStandaloneEnabled( standalone, @@ -460,7 +468,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, config.standaloneDashboardName, - config.standaloneDashboardDatabase, + dashboardDatabase || config.standaloneDashboardDatabase, config.standaloneDashboardURL, config.standaloneUsername, config.standalonePassword, From 1195ff5f86a833dc96c8250ddefe63f6a5422379 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 26 Apr 2024 11:59:10 +0200 Subject: [PATCH 069/120] Added option to define style config using environment variables for the NeoDash docker image (#876) --- .../developer-guide/style-configuration.adoc | 10 ++++++++-- scripts/config-entrypoint.sh | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index e9d5af5c4..b82124d2f 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -6,9 +6,15 @@ link:https://cdn.jsdelivr.net/npm/@neo4j-ndl/base@1.4.0/lib/tokens/css/tokens.cs For a simple (non-Dockerized) deployment, these configuration parameters can be changed by modifying `dist/style.config.json` after you have built the -application. When Docker image, these can not be passed as environment -variables. +application. When using the NeoDash Docker image, these can be passed as environment +variables. For example: +.... +docker run -p 5005:5005 \ + -e DASHBOARD_HEADER_BRAND_LOGO=https://picsum.photos/500/100 \ + neo4jlabs/neodash +.... + An example configuration for NeoDash .... diff --git a/scripts/config-entrypoint.sh b/scripts/config-entrypoint.sh index 8c4ebadbe..3e2a063ec 100644 --- a/scripts/config-entrypoint.sh +++ b/scripts/config-entrypoint.sh @@ -27,4 +27,17 @@ echo " \ \"customHeader\": \"${customHeader:=}\" \ }" > /usr/share/nginx/html/config.json -echo "${styleConfigJson:={\}}" > /usr/share/nginx/html/style.config.json +echo " \ + { \ + \"DASHBOARD_HEADER_BRAND_LOGO\": \"${DASHBOARD_HEADER_BRAND_LOGO:=}\", \ + \"DASHBOARD_HEADER_COLOR\" : \"${DASHBOARD_HEADER_COLOR:=}\", \ + \"DASHBOARD_HEADER_BUTTON_COLOR\" : \"${DASHBOARD_HEADER_BUTTON_COLOR:=}\", \ + \"DASHBOARD_HEADER_TITLE_COLOR\" : \"${DASHBOARD_HEADER_TITLE_COLOR:=}\", \ + \"DASHBOARD_PAGE_LIST_COLOR\" : \"${DASHBOARD_PAGE_LIST_COLOR:=}\", \ + \"DASHBOARD_PAGE_LIST_ACTIVE_COLOR\": \"${DASHBOARD_PAGE_LIST_ACTIVE_COLOR:=}\", \ + \"style\": { \ + \"--palette-light-neutral-bg-weak\": \"${STYLE_PALETTE_LIGHT_NEUTRAL_BG_WEAK:=}\" \ + } \ +}" > /usr/share/nginx/html/style.config.json + + From 912994ac9908fb14e331124a221551168edf9be4 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 26 Apr 2024 12:35:39 +0200 Subject: [PATCH 070/120] Added release notes for 2.4.6 (#877) * Added release notes for 2.4.6 * Removed one PR from the release notes * Fixed typo in release notes --- .github/workflows/master-deployment.yml | 4 ++-- Dockerfile | 2 +- changelog.md | 8 ++++++++ .../pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 16 ++++++---------- src/modal/AboutModal.tsx | 2 +- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index 8838807ac..c7c3afe16 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.5 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.6 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.5 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.6 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 0bbdf284b..1e78a8511 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.5" +LABEL version="2.4.6" diff --git a/changelog.md b/changelog.md index b34b6d2bd..aceee2e41 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,11 @@ +## NeoDash 2.4.6 +This is a minor release containing a few critical fixes and some extra style customizations: + +- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)). +- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)). +- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)). +- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)). + ## NeoDash 2.4.5 This is a small release containing a few fixes: - Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 1b7d4a371..6fadeb4b7 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.5 username@host:/usr/share/nginx/html +scp neodash-2.4.6 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index f15e63413..f97d7fa5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.5", + "version": "2.4.6", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index 2c8fb27d3..d8b929222 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,11 +1,7 @@ -## NeoDash 2.4.5 -This is a small release containing a few fixes: -- Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) -- Allowed text to wrap in tables, preserving the number of rows [852](https://github.com/neo4j-labs/neodash/pull/852) -- Disabled auto-sorting of Cypher query-based Parameter Select ; use Cypher ORDER BY to control result order [857](https://github.com/neo4j-labs/neodash/pull/857) -- Updated role selector menu, and made user updates more robust [854](https://github.com/neo4j-labs/neodash/pull/854) +## NeoDash 2.4.6 +This is a minor release containing a few critical fixes and some extra style customizations: -Thanks to all the contributors for this release: -- [MariusC](https://github.com/mariusconjeaud), -- [LiamEdwardsLamarche](https://github.com/LiamEdwardsLamarche), -- [AleSim94](https://github.com/AleSim94) \ No newline at end of file +- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)). +- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)). +- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)). +- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)). \ No newline at end of file diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index 8c1be47e5..826b032d5 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.5'; +export const version = '2.4.6'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From 2fc09839da6fe17e579fdfd20e105bb24d2f39be Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 26 Apr 2024 12:47:43 +0200 Subject: [PATCH 071/120] 2.4.6 Release (#878) * Make wrapping in table optional, enabled by default (#872) * Make wrapping in table optional, enabled by default * Make wrapping disabled by default --------- Co-authored-by: Marius Conjeaud * Fix bad wrapping for arrays (#868) * Fix bad wrapping for arrays * Add space for array display --------- Co-authored-by: Marius Conjeaud * Fixed issues where cross database dashboard sharing always reverted back to the default database (#873) * Fixed issues where cross database dashboard sharing always reverted back to the default database * Fix code smell from SonarQube * Added option to define style config using environment variables for the NeoDash docker image (#876) * Added release notes for 2.4.6 (#877) * Added release notes for 2.4.6 * Removed one PR from the release notes * Fixed typo in release notes --------- Co-authored-by: MariusC Co-authored-by: Marius Conjeaud --- .github/workflows/master-deployment.yml | 4 +- Dockerfile | 2 +- changelog.md | 8 ++ .../pages/developer-guide/deploy-a-build.adoc | 2 +- .../developer-guide/style-configuration.adoc | 10 +- package.json | 2 +- release-notes.md | 16 +-- scripts/config-entrypoint.sh | 15 ++- src/application/ApplicationActions.ts | 2 +- src/application/ApplicationThunks.ts | 12 +- src/chart/table/TableChart.tsx | 122 +++++++++--------- src/config/ReportConfig.tsx | 6 + src/modal/AboutModal.tsx | 2 +- src/report/ReportRecordProcessing.tsx | 7 +- 14 files changed, 126 insertions(+), 84 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index 8838807ac..c7c3afe16 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.5 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.6 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.5 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.6 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 0bbdf284b..1e78a8511 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.5" +LABEL version="2.4.6" diff --git a/changelog.md b/changelog.md index b34b6d2bd..aceee2e41 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,11 @@ +## NeoDash 2.4.6 +This is a minor release containing a few critical fixes and some extra style customizations: + +- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)). +- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)). +- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)). +- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)). + ## NeoDash 2.4.5 This is a small release containing a few fixes: - Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 1b7d4a371..6fadeb4b7 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.5 username@host:/usr/share/nginx/html +scp neodash-2.4.6 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index e9d5af5c4..b82124d2f 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -6,9 +6,15 @@ link:https://cdn.jsdelivr.net/npm/@neo4j-ndl/base@1.4.0/lib/tokens/css/tokens.cs For a simple (non-Dockerized) deployment, these configuration parameters can be changed by modifying `dist/style.config.json` after you have built the -application. When Docker image, these can not be passed as environment -variables. +application. When using the NeoDash Docker image, these can be passed as environment +variables. For example: +.... +docker run -p 5005:5005 \ + -e DASHBOARD_HEADER_BRAND_LOGO=https://picsum.photos/500/100 \ + neo4jlabs/neodash +.... + An example configuration for NeoDash .... diff --git a/package.json b/package.json index f15e63413..f97d7fa5a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.5", + "version": "2.4.6", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index 2c8fb27d3..d8b929222 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,11 +1,7 @@ -## NeoDash 2.4.5 -This is a small release containing a few fixes: -- Fixed rendering of string arrays inside tables, report titles, and report action buttons [849](https://github.com/neo4j-labs/neodash/pull/849) -- Allowed text to wrap in tables, preserving the number of rows [852](https://github.com/neo4j-labs/neodash/pull/852) -- Disabled auto-sorting of Cypher query-based Parameter Select ; use Cypher ORDER BY to control result order [857](https://github.com/neo4j-labs/neodash/pull/857) -- Updated role selector menu, and made user updates more robust [854](https://github.com/neo4j-labs/neodash/pull/854) +## NeoDash 2.4.6 +This is a minor release containing a few critical fixes and some extra style customizations: -Thanks to all the contributors for this release: -- [MariusC](https://github.com/mariusconjeaud), -- [LiamEdwardsLamarche](https://github.com/LiamEdwardsLamarche), -- [AleSim94](https://github.com/AleSim94) \ No newline at end of file +- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)). +- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)). +- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)). +- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)). \ No newline at end of file diff --git a/scripts/config-entrypoint.sh b/scripts/config-entrypoint.sh index 8c4ebadbe..3e2a063ec 100644 --- a/scripts/config-entrypoint.sh +++ b/scripts/config-entrypoint.sh @@ -27,4 +27,17 @@ echo " \ \"customHeader\": \"${customHeader:=}\" \ }" > /usr/share/nginx/html/config.json -echo "${styleConfigJson:={\}}" > /usr/share/nginx/html/style.config.json +echo " \ + { \ + \"DASHBOARD_HEADER_BRAND_LOGO\": \"${DASHBOARD_HEADER_BRAND_LOGO:=}\", \ + \"DASHBOARD_HEADER_COLOR\" : \"${DASHBOARD_HEADER_COLOR:=}\", \ + \"DASHBOARD_HEADER_BUTTON_COLOR\" : \"${DASHBOARD_HEADER_BUTTON_COLOR:=}\", \ + \"DASHBOARD_HEADER_TITLE_COLOR\" : \"${DASHBOARD_HEADER_TITLE_COLOR:=}\", \ + \"DASHBOARD_PAGE_LIST_COLOR\" : \"${DASHBOARD_PAGE_LIST_COLOR:=}\", \ + \"DASHBOARD_PAGE_LIST_ACTIVE_COLOR\": \"${DASHBOARD_PAGE_LIST_ACTIVE_COLOR:=}\", \ + \"style\": { \ + \"--palette-light-neutral-bg-weak\": \"${STYLE_PALETTE_LIGHT_NEUTRAL_BG_WEAK:=}\" \ + } \ +}" > /usr/share/nginx/html/style.config.json + + diff --git a/src/application/ApplicationActions.ts b/src/application/ApplicationActions.ts index 0b556f2dc..b8fe3d063 100644 --- a/src/application/ApplicationActions.ts +++ b/src/application/ApplicationActions.ts @@ -178,7 +178,7 @@ export const setStandaloneEnabled = ( export const SET_STANDALONE_MODE = 'APPLICATION/SET_STANDALONE_MODE'; export const setStandaloneMode = (standalone: boolean) => ({ - type: SET_STANDALONE_ENABLED, + type: SET_STANDALONE_MODE, payload: { standalone }, }); diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index fc880fd3a..e3ddc8ce0 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -259,7 +259,10 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { const skipConfirmation = urlParams.get('skipConfirmation') == 'Yes'; const dashboardDatabase = urlParams.get('dashboardDatabase'); - dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); + if (dashboardDatabase) { + dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); + } + if (urlParams.get('credentials')) { setWelcomeScreenOpen(false); const connection = decodeURIComponent(urlParams.get('credentials')); @@ -363,6 +366,8 @@ export const onConfirmLoadSharedDashboardThunk = () => (dispatch: any, getState: if (shareDetails.dashboardDatabase) { dispatch(setStandaloneDashboardDatabase(shareDetails.dashboardDatabase)); + } else if (!state.application.standaloneDashboardDatabase) { + // No standalone dashboard database configured, fall back to default dispatch(setStandaloneDashboardDatabase(shareDetails.database)); } if (shareDetails.url) { @@ -452,6 +457,9 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setSSOProviders(config.ssoProviders)); const { standalone } = config; + // if a dashboard database was previously set, remember to use it. + const dashboardDatabase = state.application.standaloneDashboardDatabase; + dispatch( setStandaloneEnabled( standalone, @@ -460,7 +468,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standalonePort, config.standaloneDatabase, config.standaloneDashboardName, - config.standaloneDashboardDatabase, + dashboardDatabase || config.standaloneDashboardDatabase, config.standaloneDashboardURL, config.standaloneUsername, config.standalonePassword, diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index c6bdf3637..58e54e71f 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -46,11 +46,9 @@ function renderAsButtonWrapper(renderer) { return <>; } return ( - + ); }; } @@ -73,6 +71,7 @@ export const generateSafeColumnKey = (key) => { export const NeoTableChart = (props: ChartProps) => { const transposed = props.settings && props.settings.transposed ? props.settings.transposed : false; + const wrapContent = props.settings && props.settings.wrapContent ? props.settings.wrapContent : false; const allowDownload = props.settings && props.settings.allowDownload !== undefined ? props.settings.allowDownload : false; @@ -214,6 +213,49 @@ export const NeoTableChart = (props: ChartProps) => { : Math.floor(availableRowHeight) - pageSizeReducer; const pageNames = getPageNumbersAndNamesList(); + const commonGridProps = { + key: 'tableKey', + headerHeight: 32, + density: compact ? 'compact' : 'standard', + rows: rows, + columns: columns, + columnVisibilityModel: columnVisibilityModel, + onColumnVisibilityModelChange: (newModel) => setColumnVisibilityModel(newModel), + onCellClick: (e) => performActionOnElement(e, actionsRules, { ...props, pageNames: pageNames }, 'Click', 'Table'), + onCellDoubleClick: (e) => { + let rules = getRule(e, actionsRules, 'doubleClick'); + if (rules !== null) { + rules.forEach((rule) => executeActionRule(rule, e, { ...props, pageNames: pageNames }, 'table')); + } else { + setNotificationOpen(true); + navigator.clipboard.writeText(e.value); + } + }, + checkboxSelection: hasCheckboxes(actionsRules), + selectionModel: getCheckboxes(actionsRules, rows, props.getGlobalParameter), + onSelectionModelChange: (selection) => updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter), + pageSize: tablePageSize > 0 ? tablePageSize : 5, + rowsPerPageOptions: rows.length < 5 ? [rows.length, 5] : [5], + disableSelectionOnClick: true, + components: { + ColumnSortedDescendingIcon: () => <>, + ColumnSortedAscendingIcon: () => <>, + }, + getRowClassName: (params) => { + return ['row color', 'row text color'] + .map((e) => { + return `rule${evaluateRulesOnDict(params.row, styleRules, [e])}`; + }) + .join(' '); + }, + getCellClassName: (params) => { + return ['cell color', 'cell text color'] + .map((e) => { + return `rule${evaluateRulesOnDict({ [params.field]: params.value }, styleRules, [e])}`; + }) + .join(' '); + }, + }; return ( @@ -259,61 +301,21 @@ export const NeoTableChart = (props: ChartProps) => { <> )} - 'auto'} - rows={rows} - columns={columns} - columnVisibilityModel={columnVisibilityModel} - onColumnVisibilityModelChange={(newModel) => setColumnVisibilityModel(newModel)} - onCellClick={(e) => - performActionOnElement(e, actionsRules, { ...props, pageNames: pageNames }, 'Click', 'Table') - } - onCellDoubleClick={(e) => { - let rules = getRule(e, actionsRules, 'doubleClick'); - if (rules !== null) { - rules.forEach((rule) => executeActionRule(rule, e, { ...props, pageNames: pageNames }, 'table')); - } else { - setNotificationOpen(true); - navigator.clipboard.writeText(e.value); - } - }} - checkboxSelection={hasCheckboxes(actionsRules)} - selectionModel={getCheckboxes(actionsRules, rows, props.getGlobalParameter)} - onSelectionModelChange={(selection) => - updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter) - } - pageSize={tablePageSize > 0 ? tablePageSize : 5} - rowsPerPageOptions={rows.length < 5 ? [rows.length, 5] : [5]} - disableSelectionOnClick - components={{ - ColumnSortedDescendingIcon: () => <>, - ColumnSortedAscendingIcon: () => <>, - }} - getRowClassName={(params) => { - return ['row color', 'row text color'] - .map((e) => { - return `rule${evaluateRulesOnDict(params.row, styleRules, [e])}`; - }) - .join(' '); - }} - getCellClassName={(params) => { - return ['cell color', 'cell text color'] - .map((e) => { - return `rule${evaluateRulesOnDict({ [params.field]: params.value }, styleRules, [e])}`; - }) - .join(' '); - }} - sx={{ - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, - '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, - '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, - '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, - }} - /> + {wrapContent ? ( + 'auto'} + sx={{ + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, + '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, + '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, + '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, + '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, + }} + /> + ) : ( + + )}
    ); diff --git a/src/config/ReportConfig.tsx b/src/config/ReportConfig.tsx index e9270c314..97b6bc913 100644 --- a/src/config/ReportConfig.tsx +++ b/src/config/ReportConfig.tsx @@ -46,6 +46,12 @@ const _REPORT_TYPES = { values: [true, false], default: false, }, + wrapContent: { + label: 'Wrap overflowing content', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: false, + }, columnWidthsType: { label: 'Column Widths Specification', type: SELECTION_TYPES.LIST, diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index 8c1be47e5..826b032d5 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.5'; +export const version = '2.4.6'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 726beaebe..f30908577 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -247,12 +247,15 @@ function RenderPath(value) { } function RenderArray(value) { + if (value.length > 0 && !valueIsNode(value[0]) && !valueIsRelationship(value[0])) { + return RenderString(value.join(', ')); + } const mapped = value.map((v, i) => { return ( -
    + {RenderSubValue(v)} {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? : <>} -
    + ); }); return mapped; From e14324c08c327b0d6bdcdb105dd691a756e943e1 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 29 Apr 2024 15:41:56 +0200 Subject: [PATCH 072/120] Fix multi-parameter select and transposed table side effect --- src/chart/table/TableChart.tsx | 4 +++- src/report/ReportRecordProcessing.tsx | 33 ++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 58e54e71f..d64633056 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -184,7 +184,9 @@ export const NeoTableChart = (props: ChartProps) => { Object.assign( { id: i, Field: key }, ...records.map((record, j) => ({ - [`${record._fields[0]}_${j + 1}`]: RenderSubValue(record._fields[i + 1]), + // Note the true here is for the rendered to know we are inside a transposed table + // It will be needed for rendering the records properly, if they are arrays + [`${record._fields[0]}_${j + 1}`]: RenderSubValue(record._fields[i + 1], true), })) ) ); diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index f30908577..3cd183d57 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -246,11 +246,32 @@ function RenderPath(value) { }); } -function RenderArray(value) { +/** + * Renders an array of values. + * + * @param value - The array of values to render. + * @param transposedTable - Optional. Specifies whether the table should be transposed. Default is false. + * @returns The rendered array of values. + */ +function RenderArray(value, transposedTable = false) { + let mapped = []; + // If the first value is neither a Node nor a Relationship object + // It is safe to assume that all values should be renedered as strings if (value.length > 0 && !valueIsNode(value[0]) && !valueIsRelationship(value[0])) { - return RenderString(value.join(', ')); + // If this request comes up from a transposed table + // The returned value must be a single value, not an array + // Otherwise, it will cast to [Object object], [Object object] + if (transposedTable) { + return RenderString(value.join(', ')); + } + // Nominal case of a list of values renderable as strings + // These should be joined by commas, and not inside tags + mapped = value.map((v, i) => { + return RenderSubValue(v) + (i < value.length - 1 ? ', ' : ''); + }); } - const mapped = value.map((v, i) => { + // Render Node and Relationship objects, which will look like a Path + mapped = value.map((v, i) => { return ( {RenderSubValue(v)} @@ -320,7 +341,7 @@ function RenderNumber(value) { return number; } -export function RenderSubValue(value) { +export function RenderSubValue(value, transposedTable = false) { if (value == undefined) { return ''; } @@ -328,7 +349,7 @@ export function RenderSubValue(value) { const columnProperties = rendererForType[type]; if (columnProperties) { if (columnProperties.renderValue) { - return columnProperties.renderValue({ value: value }); + return columnProperties.renderValue({ value: value, transposedTable: transposedTable }); } else if (columnProperties.valueGetter) { return columnProperties.valueGetter({ value: value }); } @@ -366,7 +387,7 @@ export const rendererForType: any = { }, array: { type: 'string', - renderValue: (c) => RenderArray(c.value), + renderValue: (c) => RenderArray(c.value, c.transposedTable ? c.transposedTable : false), }, string: { type: 'string', From 21f95475d378ebe52ad25b9b72ca923aed364c8f Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 29 Apr 2024 15:41:56 +0200 Subject: [PATCH 073/120] Fix multi-parameter select and transposed table side effect --- src/chart/table/TableChart.tsx | 4 +++- src/report/ReportRecordProcessing.tsx | 33 ++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 58e54e71f..d64633056 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -184,7 +184,9 @@ export const NeoTableChart = (props: ChartProps) => { Object.assign( { id: i, Field: key }, ...records.map((record, j) => ({ - [`${record._fields[0]}_${j + 1}`]: RenderSubValue(record._fields[i + 1]), + // Note the true here is for the rendered to know we are inside a transposed table + // It will be needed for rendering the records properly, if they are arrays + [`${record._fields[0]}_${j + 1}`]: RenderSubValue(record._fields[i + 1], true), })) ) ); diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index f30908577..3cd183d57 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -246,11 +246,32 @@ function RenderPath(value) { }); } -function RenderArray(value) { +/** + * Renders an array of values. + * + * @param value - The array of values to render. + * @param transposedTable - Optional. Specifies whether the table should be transposed. Default is false. + * @returns The rendered array of values. + */ +function RenderArray(value, transposedTable = false) { + let mapped = []; + // If the first value is neither a Node nor a Relationship object + // It is safe to assume that all values should be renedered as strings if (value.length > 0 && !valueIsNode(value[0]) && !valueIsRelationship(value[0])) { - return RenderString(value.join(', ')); + // If this request comes up from a transposed table + // The returned value must be a single value, not an array + // Otherwise, it will cast to [Object object], [Object object] + if (transposedTable) { + return RenderString(value.join(', ')); + } + // Nominal case of a list of values renderable as strings + // These should be joined by commas, and not inside tags + mapped = value.map((v, i) => { + return RenderSubValue(v) + (i < value.length - 1 ? ', ' : ''); + }); } - const mapped = value.map((v, i) => { + // Render Node and Relationship objects, which will look like a Path + mapped = value.map((v, i) => { return ( {RenderSubValue(v)} @@ -320,7 +341,7 @@ function RenderNumber(value) { return number; } -export function RenderSubValue(value) { +export function RenderSubValue(value, transposedTable = false) { if (value == undefined) { return ''; } @@ -328,7 +349,7 @@ export function RenderSubValue(value) { const columnProperties = rendererForType[type]; if (columnProperties) { if (columnProperties.renderValue) { - return columnProperties.renderValue({ value: value }); + return columnProperties.renderValue({ value: value, transposedTable: transposedTable }); } else if (columnProperties.valueGetter) { return columnProperties.valueGetter({ value: value }); } @@ -366,7 +387,7 @@ export const rendererForType: any = { }, array: { type: 'string', - renderValue: (c) => RenderArray(c.value), + renderValue: (c) => RenderArray(c.value, c.transposedTable ? c.transposedTable : false), }, string: { type: 'string', From c0a030b56b1bca34a18a3ee52caea192dca04b41 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Tue, 30 Apr 2024 16:31:38 +0200 Subject: [PATCH 074/120] Write tests for array render method --- cypress/e2e/render/array.cy.js | 123 ++++++++++++++++++++++++++ cypress/e2e/start_page.cy.js | 44 +-------- cypress/e2e/utils.js | 84 ++++++++++++++++++ cypress/fixtures/cypher_queries.js | 8 ++ src/report/ReportRecordProcessing.tsx | 2 +- 5 files changed, 217 insertions(+), 44 deletions(-) create mode 100644 cypress/e2e/render/array.cy.js create mode 100644 cypress/e2e/utils.js diff --git a/cypress/e2e/render/array.cy.js b/cypress/e2e/render/array.cy.js new file mode 100644 index 000000000..0ad7e436d --- /dev/null +++ b/cypress/e2e/render/array.cy.js @@ -0,0 +1,123 @@ +import { stringArrayCypherQuery, intArrayCypherQuery, pathArrayCypherQuery } from '../../fixtures/cypher_queries'; +import { + enableReportActions, + createReportOfType, + closeSettings, + toggleTableTranspose, + openReportActionsMenu, +} from '../utils'; + +const WAITING_TIME = 20000; +const CARD_SELECTOR = 'main .react-grid-item:eq(2)'; +// Ignore warnings that may appear when using the Cypress dev server +Cypress.on('uncaught:exception', (err, runnable) => { + console.log(err, runnable); + return false; +}); + +describe('Testing array rendering', () => { + beforeEach('open neodash', () => { + cy.viewport(1920, 1080); + cy.visit('/', { + onBeforeLoad(win) { + win.localStorage.clear(); + }, + }); + + cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME }) + .should('contain', 'NeoDash - Neo4j Dashboard Builder') + .click(); + + cy.get('#form-dialog-title').then(($div) => { + const text = $div.text(); + if (text == 'NeoDash - Neo4j Dashboard Builder') { + cy.wait(500); + // Create new dashboard + cy.contains('New Dashboard').click(); + } + }); + + cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME }).should('contain', 'Connect to Neo4j'); + + cy.get('#url').clear().type('localhost'); + cy.get('#dbusername').clear().type('neo4j'); + cy.get('#dbpassword').type('test1234'); + cy.get('button').contains('Connect').click(); + cy.wait(100); + }); + + it('creates a table that contains string arrays', () => { + cy.checkInitialState(); + enableReportActions(); + createReportOfType('Table', stringArrayCypherQuery, true, true); + + // Standard array, displays strings joined with comma and whitespace + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'initial, list'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list'); + + // Now, transpose the table + toggleTableTranspose(CARD_SELECTOR, true); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should( + 'have.text', + 'initial,list' + ); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list'); + + // Transpose back + // And add a report action + toggleTableTranspose(CARD_SELECTOR, false); + openReportActionsMenu(CARD_SELECTOR); + cy.get('.ndl-modal').find('button[aria-label="add"]').click(); + cy.get('.ndl-modal').find('input:eq(2)').type('column'); + cy.get('.ndl-modal').find('input:eq(5)').type('test_param'); + cy.get('.ndl-modal').find('input:eq(6)').type('column'); + cy.get('.ndl-modal').find('button').contains('Save').click(); + closeSettings(CARD_SELECTOR); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`) + .find('button') + .should('be.visible') + .should('have.text', 'initial, list') + .click(); + + // Previous step's click set a parameter from the array + // Test that parameter rendering works + cy.get(`${CARD_SELECTOR} .MuiCardHeader-root`).find('input').type('$neodash_test_param').blur(); + cy.get(`${CARD_SELECTOR} .MuiCardHeader-root`).find('input').should('have.value', 'initial, list'); + }); + + it.skip('creates a table that contains int arrays', () => { + cy.checkInitialState(); + createReportOfType('Table', intArrayCypherQuery, true, true); + + // Standard array, displays strings joined with comma and whitespace + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', '1, 2'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4'); + + // Now, transpose the table + toggleTableTranspose(CARD_SELECTOR, true); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should( + 'have.text', + '1,2' + ); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4'); + }); + + it.skip('creates a table that contains nodes and rels', () => { + cy.checkInitialState(); + createReportOfType('Table', pathArrayCypherQuery, true, true); + + // Standard array, displays a path with two nodes and a relationship + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'PersonACTED_INMovie'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button`).should('have.length', 2); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button:eq(0)`).should('have.text', 'Person'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) button:eq(1)`).should('have.text', 'Movie'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) .MuiChip-root`).should('have.length', 1); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) .MuiChip-root`).should('have.text', 'ACTED_IN'); + }); + + it.skip('creates a single value report which is an array', () => { + cy.checkInitialState(); + createReportOfType('Single Value', stringArrayCypherQuery, true, true); + cy.get(CARD_SELECTOR).should('have.text', 'initial, list'); + }); +}); diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index 2f6bfa873..c6e9f7c4b 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -10,6 +10,7 @@ import { gaugeChartCypherQuery, formCypherQuery, } from '../fixtures/cypher_queries'; +import { createReportOfType, selectReportOfType, enableAdvancedVisualizations, enableFormsExtension } from './utils'; const WAITING_TIME = 20000; // Ignore warnings that may appear when using the Cypress dev server @@ -293,46 +294,3 @@ describe('NeoDash E2E Tests', () => { } }); }); - -function enableAdvancedVisualizations() { - cy.get('main button[aria-label="Extensions').should('be.visible').click(); - cy.get('#checkbox-advanced-charts').should('be.visible').click(); - cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); - cy.wait(200); -} - -function enableFormsExtension() { - cy.get('main button[aria-label="Extensions').should('be.visible').click(); - cy.get('#checkbox-forms').scrollIntoView(); - cy.get('#checkbox-forms').should('be.visible').click(); - cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); - cy.wait(200); -} - -function selectReportOfType(type) { - cy.get('main .react-grid-item button[aria-label="add report"]').should('be.visible').click(); - cy.get('main .react-grid-item') - .contains('No query specified.') - .parentsUntil('.react-grid-item') - .find('button[aria-label="settings"]', { timeout: 2000 }) - .should('be.visible') - .click(); - cy.get('main .react-grid-item:eq(2) #type', { timeout: 2000 }).should('be.visible').click(); - cy.contains(type).click(); - cy.wait(100); -} - -function createReportOfType(type, query, fast = false, run = true) { - selectReportOfType(type); - if (fast) { - cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { delay: 1, parseSpecialCharSequences: false }); - } else { - cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { parseSpecialCharSequences: false }); - } - cy.wait(400); - - cy.get('main .react-grid-item:eq(2)').contains('Advanced settings').click(); - if (run) { - cy.get('main .react-grid-item:eq(2) button[aria-label="run"]').click(); - } -} diff --git a/cypress/e2e/utils.js b/cypress/e2e/utils.js new file mode 100644 index 000000000..ae5639cf9 --- /dev/null +++ b/cypress/e2e/utils.js @@ -0,0 +1,84 @@ +export function enableReportActions() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-actions').scrollIntoView(); + cy.get('#checkbox-actions').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(200); +} + +export function enableAdvancedVisualizations() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-advanced-charts').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(200); +} + +export function enableFormsExtension() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-forms').scrollIntoView(); + cy.get('#checkbox-forms').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(200); +} + +export function selectReportOfType(type) { + cy.get('main .react-grid-item button[aria-label="add report"]').should('be.visible').click(); + cy.get('main .react-grid-item') + .contains('No query specified.') + .parentsUntil('.react-grid-item') + .find('button[aria-label="settings"]', { timeout: 2000 }) + .should('be.visible') + .click(); + cy.get('main .react-grid-item:eq(2) #type', { timeout: 2000 }).should('be.visible').click(); + cy.contains(type).click(); + cy.wait(100); +} + +export function createReportOfType(type, query, fast = false, run = true) { + selectReportOfType(type); + if (fast) { + cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { delay: 1, parseSpecialCharSequences: false }); + } else { + cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { parseSpecialCharSequences: false }); + } + cy.wait(400); + + if (run) { + closeSettings('main .react-grid-item:eq(2)'); + } +} + +export function openSettings(cardSelector) { + cy.get(cardSelector).find('button[aria-label="settings"]', { WAITING_TIME: 2000 }).click(); +} + +export function closeSettings(cardSelector) { + cy.get(`${cardSelector} button[aria-label="run"]`).click(); +} + +export function openAdvancedSettings(cardSelector) { + openSettings(cardSelector); + cy.get(cardSelector).contains('Advanced settings').click(); +} + +export function closeAdvancedSettings(cardSelector) { + cy.get(cardSelector).contains('Advanced settings').click(); + closeSettings(cardSelector); +} + +export function openReportActionsMenu(cardSelector) { + openSettings(cardSelector); + cy.get(cardSelector).find('button[aria-label="custom actions"]').click(); +} + +export function updateDropdownAdvancedSetting(cardSelector, settingLabel, targetValue) { + openAdvancedSettings(cardSelector); + cy.get(`${cardSelector} .ndl-dropdown`).contains(settingLabel).siblings('div').click(); + cy.contains(targetValue).click(); + closeAdvancedSettings(cardSelector); +} + +export function toggleTableTranspose(cardSelector, enable) { + let transpose = enable ? 'on' : 'off'; + updateDropdownAdvancedSetting(cardSelector, 'Transpose Rows & Columns', transpose); +} diff --git a/cypress/fixtures/cypher_queries.js b/cypress/fixtures/cypher_queries.js index 4f009b7ae..c47c6c2be 100644 --- a/cypress/fixtures/cypher_queries.js +++ b/cypress/fixtures/cypher_queries.js @@ -1,3 +1,4 @@ +// Cypher queries - for component testing export const defaultCypherQuery = 'MATCH (n) RETURN n LIMIT 25'; export const tableCypherQuery = 'MATCH (n:Movie) RETURN n.title AS title, n.released AS released, id(n) AS __id LIMIT 8'; @@ -13,6 +14,13 @@ export const sankeyChartCypherQuery = "WITH [ { path: { start: {labels: ['Person'], identity: 1, properties: {name: 'Jim'}}, end: {identity: 11}, length: 1, segments: [ { start: {labels: ['Person'], identity: 1, properties: {name: 'Jim'}}, relationship: {type: 'RATES', start: 1, end: 11, identity: 10001, properties: {value: 4.5}}, end: {labels: ['Movie'], identity: 11,properties: {title: 'The Matrix', released: 1999}} } ] }, person: 'Jim', movie: 'The Matrix', value: 4.5 }, { path: { start: {labels: ['Person'], identity: 2, properties: {name: 'Mike'}}, end: {identity: 11}, length: 1, segments: [ { start: {labels: ['Person'], identity: 2, properties: {name: 'Mike'}}, relationship: {type: 'RATES', start: 2, end: 11, identity: 10002, properties: {value: 3.8}}, end: {labels: ['Movie'], identity: 11,properties: {title: 'The Matrix', released: 1999}} } ] }, person: 'Mike', movie: 'The Matrix', value: 3.8 } ] as data UNWIND data as row RETURN row.path as Path"; export const gaugeChartCypherQuery = 'RETURN 69'; export const formCypherQuery = 'MATCH (n:Movie) WHERE n.title = $neodash_movie_title SET n.rating = 92'; + +// Cypher queries - for renderer testing +export const stringArrayCypherQuery = "RETURN ['initial', 'list'] AS column, ['other', 'list'] AS otherColumn"; +export const intArrayCypherQuery = 'RETURN [1, 2] AS column, [3, 4] AS otherColumn'; +export const pathArrayCypherQuery = 'MATCH p=(:Person)-[:ACTED_IN]->(:Movie) WITH p LIMIT 1 RETURN p'; + +// Other content fixtures export const iFrameText = 'https://www.wikipedia.org/'; export const markdownText = '# Hello'; export const loadDashboardURL = diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 3cd183d57..ac7b1140e 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -275,7 +275,7 @@ function RenderArray(value, transposedTable = false) { return ( {RenderSubValue(v)} - {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? : <>} + {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? , : <>} ); }); From f2ff2561e55381f5ce471a7ed048cd668283cfd4 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Thu, 2 May 2024 08:46:28 +0200 Subject: [PATCH 075/120] Remove debugging test skips --- cypress/e2e/render/array.cy.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/render/array.cy.js b/cypress/e2e/render/array.cy.js index 0ad7e436d..135fd6721 100644 --- a/cypress/e2e/render/array.cy.js +++ b/cypress/e2e/render/array.cy.js @@ -85,7 +85,7 @@ describe('Testing array rendering', () => { cy.get(`${CARD_SELECTOR} .MuiCardHeader-root`).find('input').should('have.value', 'initial, list'); }); - it.skip('creates a table that contains int arrays', () => { + it('creates a table that contains int arrays', () => { cy.checkInitialState(); createReportOfType('Table', intArrayCypherQuery, true, true); @@ -102,7 +102,7 @@ describe('Testing array rendering', () => { cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4'); }); - it.skip('creates a table that contains nodes and rels', () => { + it('creates a table that contains nodes and rels', () => { cy.checkInitialState(); createReportOfType('Table', pathArrayCypherQuery, true, true); @@ -115,7 +115,7 @@ describe('Testing array rendering', () => { cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0) .MuiChip-root`).should('have.text', 'ACTED_IN'); }); - it.skip('creates a single value report which is an array', () => { + it('creates a single value report which is an array', () => { cy.checkInitialState(); createReportOfType('Single Value', stringArrayCypherQuery, true, true); cy.get(CARD_SELECTOR).should('have.text', 'initial, list'); From 2ff63c95e36cf955d490eb25ddda1f8ece194f3d Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Thu, 2 May 2024 09:42:21 +0200 Subject: [PATCH 076/120] Add test for multiple parameter select --- cypress/e2e/render/array.cy.js | 30 ++++++++++++++++++++++++++++++ cypress/e2e/utils.js | 8 ++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/render/array.cy.js b/cypress/e2e/render/array.cy.js index 135fd6721..a7bba3643 100644 --- a/cypress/e2e/render/array.cy.js +++ b/cypress/e2e/render/array.cy.js @@ -5,6 +5,9 @@ import { closeSettings, toggleTableTranspose, openReportActionsMenu, + selectReportOfType, + openAdvancedSettings, + updateDropdownAdvancedSetting, } from '../utils'; const WAITING_TIME = 20000; @@ -120,4 +123,31 @@ describe('Testing array rendering', () => { createReportOfType('Single Value', stringArrayCypherQuery, true, true); cy.get(CARD_SELECTOR).should('have.text', 'initial, list'); }); + + it('creates a multi parameter select', () => { + cy.checkInitialState(); + selectReportOfType('Parameter Select'); + cy.get('main .react-grid-item:eq(2) label[for="Selection Type"]').siblings('div').click(); + // Set up the parameter select + cy.contains('Node Property').click(); + cy.wait(100); + cy.contains('Node Label').click(); + cy.contains('Node Label').siblings('div').find('input').type('Movie'); + cy.wait(1000); + cy.get('.MuiAutocomplete-popper').contains('Movie').click(); + cy.contains('Property Name').click(); + cy.contains('Property Name').siblings('div').find('input').type('title'); + cy.wait(1000); + cy.get('.MuiAutocomplete-popper').contains('title').click(); + // Enable multiple selection + updateDropdownAdvancedSetting(CARD_SELECTOR, 'Multiple Selection', 'on'); + // Finally, select a few values in the parameter select + cy.get(CARD_SELECTOR).contains('Movie title').click(); + cy.get(CARD_SELECTOR).contains('Movie title').siblings('div').find('input').type('a'); + cy.get('.MuiAutocomplete-popper').contains('Apollo 13').click(); + cy.get(CARD_SELECTOR).contains('Movie title').siblings('div').find('input').type('t'); + cy.get('.MuiAutocomplete-popper').contains('The Matrix').click(); + cy.get(CARD_SELECTOR).contains('Apollo 13').should('be.visible'); + cy.get(CARD_SELECTOR).contains('The Matrix').should('be.visible'); + }); }); diff --git a/cypress/e2e/utils.js b/cypress/e2e/utils.js index ae5639cf9..b7a219cc1 100644 --- a/cypress/e2e/utils.js +++ b/cypress/e2e/utils.js @@ -57,8 +57,12 @@ export function closeSettings(cardSelector) { } export function openAdvancedSettings(cardSelector) { - openSettings(cardSelector); - cy.get(cardSelector).contains('Advanced settings').click(); + if (cy.get(cardSelector).contains('Advanced settings').should('be.visible')) { + cy.get(cardSelector).contains('Advanced settings').click(); + } else { + openSettings(cardSelector); + cy.get(cardSelector).contains('Advanced settings').click(); + } } export function closeAdvancedSettings(cardSelector) { From 7e10e22a51a674adad0a3d8e94802e87ba84671c Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Thu, 2 May 2024 10:00:54 +0200 Subject: [PATCH 077/120] Fix tests --- cypress/e2e/render/array.cy.js | 1 + cypress/e2e/utils.js | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cypress/e2e/render/array.cy.js b/cypress/e2e/render/array.cy.js index a7bba3643..108d4aceb 100644 --- a/cypress/e2e/render/array.cy.js +++ b/cypress/e2e/render/array.cy.js @@ -140,6 +140,7 @@ describe('Testing array rendering', () => { cy.wait(1000); cy.get('.MuiAutocomplete-popper').contains('title').click(); // Enable multiple selection + closeSettings(CARD_SELECTOR); updateDropdownAdvancedSetting(CARD_SELECTOR, 'Multiple Selection', 'on'); // Finally, select a few values in the parameter select cy.get(CARD_SELECTOR).contains('Movie title').click(); diff --git a/cypress/e2e/utils.js b/cypress/e2e/utils.js index b7a219cc1..ae5639cf9 100644 --- a/cypress/e2e/utils.js +++ b/cypress/e2e/utils.js @@ -57,12 +57,8 @@ export function closeSettings(cardSelector) { } export function openAdvancedSettings(cardSelector) { - if (cy.get(cardSelector).contains('Advanced settings').should('be.visible')) { - cy.get(cardSelector).contains('Advanced settings').click(); - } else { - openSettings(cardSelector); - cy.get(cardSelector).contains('Advanced settings').click(); - } + openSettings(cardSelector); + cy.get(cardSelector).contains('Advanced settings').click(); } export function closeAdvancedSettings(cardSelector) { From 9f4d94f4b3855f2c9d5c4d8c17d540028065e18f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 10:04:59 +0000 Subject: [PATCH 078/120] Bump ejs from 3.1.9 to 3.1.10 in /gallery Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10. - [Release notes](https://github.com/mde/ejs/releases) - [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- gallery/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gallery/yarn.lock b/gallery/yarn.lock index 53f7e1fe2..0483d3743 100644 --- a/gallery/yarn.lock +++ b/gallery/yarn.lock @@ -3968,9 +3968,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" From 04f048ae08a623701481381058225ef61ffb17f7 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Fri, 3 May 2024 16:38:43 +0200 Subject: [PATCH 079/120] Remove redundant ternary operator --- src/report/ReportRecordProcessing.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index ac7b1140e..15159b911 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -387,7 +387,7 @@ export const rendererForType: any = { }, array: { type: 'string', - renderValue: (c) => RenderArray(c.value, c.transposedTable ? c.transposedTable : false), + renderValue: (c) => RenderArray(c.value, c.transposedTable), }, string: { type: 'string', From 30366857e8cb6a72da7cc5fa61d9dfb23aa66916 Mon Sep 17 00:00:00 2001 From: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Date: Mon, 6 May 2024 09:52:28 +0530 Subject: [PATCH 080/120] added cypress --- cypress/e2e/start_page.cy.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index 2f6bfa873..2d15bb050 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -245,7 +245,7 @@ describe('NeoDash E2E Tests', () => { cy.get('main .react-grid-item:eq(2) .MuiCardContent-root h1', { timeout: 45000 }).should('have.text', 'Hello'); }); - it.skip('creates a form report', () => { + it.only('creates a form report', () => { enableFormsExtension(); cy.checkInitialState(); createReportOfType('Form', formCypherQuery, true, false); @@ -261,8 +261,10 @@ describe('NeoDash E2E Tests', () => { cy.get('main .react-grid-item:eq(2) button[aria-label="run"]').scrollIntoView().should('be.visible').click(); cy.wait(500); + cy.get('#form-submit').should('be.disabled'); cy.get('#autocomplete').type('The Matrix'); cy.get('#autocomplete-option-0').click(); + cy.get('#form-submit').should('not.be.disabled'); cy.get('#form-submit').click(); cy.wait(500); cy.get('.form-submitted-message').should('have.text', 'Form Submitted.Reset Form'); From e0a5179e54c28997c9434595afda617461c12aa6 Mon Sep 17 00:00:00 2001 From: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Date: Mon, 6 May 2024 09:54:14 +0530 Subject: [PATCH 081/120] Added cypress --- cypress/e2e/start_page.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index 2d15bb050..b0f2dee46 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -245,7 +245,7 @@ describe('NeoDash E2E Tests', () => { cy.get('main .react-grid-item:eq(2) .MuiCardContent-root h1', { timeout: 45000 }).should('have.text', 'Hello'); }); - it.only('creates a form report', () => { + it.skip('creates a form report', () => { enableFormsExtension(); cy.checkInitialState(); createReportOfType('Form', formCypherQuery, true, false); From c1013c9660c277e40711135036f7ea988cfc6968 Mon Sep 17 00:00:00 2001 From: alfredorubin96 Date: Tue, 7 May 2024 11:14:18 +0200 Subject: [PATCH 082/120] changed file according to PR #837 --- gallery/dashboards/fraud.json | 574 ++++++++++++++++++---------------- 1 file changed, 308 insertions(+), 266 deletions(-) diff --git a/gallery/dashboards/fraud.json b/gallery/dashboards/fraud.json index b75717ba0..b96145042 100644 --- a/gallery/dashboards/fraud.json +++ b/gallery/dashboards/fraud.json @@ -1,282 +1,324 @@ { - "title": "Financial Crimes Enforcement Dashboard 🕵️", - "version": "2.1", - "settings": { - "pagenumber": 0, - "editable": true, - "parameters": { - "neodash_entity_name": null, - "neodash_country_name": null - }, - "fullscreenEnabled": true + "uuid": "b3236f88-ff8b-492d-8a84-d620a3dd629d", + "title": "Financial Crimes Enforcement Dashboard 🕵️", + "version": "2.4", + "settings": { + "pagenumber": 0, + "editable": true, + "parameters": { + "neodash_entity_name": null, + "neodash_country_name": null }, - "pages": [ - { - "title": "Countries", - "reports": [ - { - "x": 0, - "y": 0, - "title": "About this dashboard", - "query": "This is an example dashboard on financial crime data. It uses the `fincen` dataset from \n[https://demo.neo4jlabs.com/](https://demo.neo4jlabs.com/).\n\nThis dashboard's purpose is to provide examples on how to use and customize all the different NeoDash report types.\n\nIt consists of three pages:\n- **Countries**: high-level data on specific countries.\n- **Investigate Entity**: a way to drill down into a specific entity.\n- **Statistics**: high-level statistics about the data.\n\nTry out the Documentation 📄 button on the left for basic examples of the different visualization reports.", - "width": "4", - "type": "text", - "height": 2, - "selection": {}, - "settings": {} + "fullscreenEnabled": true + }, + "pages": [ + { + "title": "Countries", + "reports": [ + { + "x": 0, + "y": 0, + "title": "About this dashboard", + "query": "This is an example dashboard on financial crime data. It uses the `fincen` dataset from \n[https://demo.neo4jlabs.com/](https://demo.neo4jlabs.com/).\n\nThis dashboard's purpose is to provide examples on how to use and customize all the different NeoDash report types.\n\nIt consists of three pages:\n- **Countries**: high-level data on specific countries.\n- **Investigate Entity**: a way to drill down into a specific entity.\n- **Statistics**: high-level statistics about the data.\n\nTry out the Documentation 📄 button on the left for basic examples of the different visualization reports.", + "width": 8, + "type": "text", + "height": 4, + "selection": {}, + "settings": {}, + "id": "bd17ccad-c12e-4e5a-8e45-48504b071698" + }, + { + "x": 8, + "y": 0, + "title": "How much does each entity benefit in total? (Hint: try clicking the table headers to sort/filter data)", + "query": "MATCH Path=(e:Entity)-[:COUNTRY]->(c:Country), (f:Filing)-[:BENEFITS]->(e)\nRETURN Path, e.name as Entity, c.name as Country, suM(f.amount) as `Total Benefit ($)`\nLIMIT 1000", + "width": 16, + "type": "table", + "height": 4, + "selection": {}, + "settings": {}, + "id": "6db3061c-12c5-4a92-a1a1-bf7e40c068a4" + }, + { + "x": 0, + "y": 4, + "title": "Where in Europe does the Netherlands send money to?", + "query": "MATCH (c1:Country)--(:Entity)<-[:ORIGINATOR]-(f:Filing)-[:BENEFITS]->(:Entity)--(c2:Country)\nWHERE c1.name = \"Netherlands\"\nAND point.distance(c2.location, point({latitude: 53, longitude: 9})) < 3000000\nWITH c1, c2, sum(f.amount) as amount ORDER BY amount DESC\nRETURN c1, c2, apoc.create.vRelationship(c1, \"TRANSFER\", {amount: amount}, c2) ", + "width": 12, + "type": "map", + "height": 4, + "selection": { + "Country": "(no label)", + "TRANSFER": "(label)" }, - { - "x": 4, - "y": 0, - "title": "How much does each entity benefit in total? (Hint: try clicking the table headers to sort/filter data)", - "query": "MATCH Path=(e:Entity)-[:COUNTRY]->(c:Country), (f:Filing)-[:BENEFITS]->(e)\nRETURN Path, e.name as Entity, c.name as Country, suM(f.amount) as `Total Benefit ($)`\nLIMIT 1000", - "width": "8", - "type": "table", - "height": 2, - "selection": {}, - "settings": {} + "settings": { + "defaultRelColor": "rgba(120,120,120,0.5)", + "defaultRelWidth": 5, + "defaultNodeSize": "medium", + "nodeColorScheme": "category10" }, - { - "x": 0, - "y": 2, - "title": "Where in Europe does the Netherlands send money to?", - "query": "MATCH (c1:Country)--(:Entity)<-[:ORIGINATOR]-(f:Filing)-[:BENEFITS]->(:Entity)--(c2:Country)\nWHERE c1.name = \"Netherlands\"\nAND distance(c2.location, point({latitude: 53, longitude: 9})) < 3000000\nWITH c1, c2, sum(f.amount) as amount ORDER BY amount DESC\nRETURN c1, c2, apoc.create.vRelationship(c1, \"TRANSFER\", {amount: amount}, c2) ", - "width": "6", - "type": "map", - "height": 2, - "selection": { - "Country": "(no label)" - }, - "settings": { - "defaultRelColor": "rgba(120,120,120,0.5)", - "defaultRelWidth": 5, - "defaultNodeSize": "medium", - "nodeColorScheme": "category10" - } + "id": "5484e81c-52b2-416d-8b7f-fa112887fbec", + "schema": [ + ["Country", "code", "name", "location", "tld"], + ["TRANSFER", "amount"] + ] + }, + { + "x": 12, + "y": 4, + "title": "Which entities are involved?", + "query": "MATCH (c1:Country)--(:Entity)<-[:ORIGINATOR]-(f:Filing)-[:BENEFITS]->(:Entity)--(c2:Country)\nWHERE c1.name = \"Netherlands\"\nAND point.distance(c2.location, point({latitude: 53, longitude: 9})) < 3000000\nWITH c1, c2, sum(f.amount) as amount\nWITH c1, c2, apoc.create.vRelationship(c1, \"TRANSFER\", {amount: amount}, c2) as t\n\nMATCH path=(c2:Country)-[r]-(e:Entity)\nRETURN c1, t, c2, collect(path)[0..10]", + "width": 12, + "type": "graph", + "height": 4, + "selection": { + "Country": "name", + "TRANSFER": "(label)", + "Entity": "name" }, - { - "x": 6, - "y": 2, - "title": "Which entities are involved?", - "query": "MATCH (c1:Country)--(:Entity)<-[:ORIGINATOR]-(f:Filing)-[:BENEFITS]->(:Entity)--(c2:Country)\nWHERE c1.name = \"Netherlands\"\nAND distance(c2.location, point({latitude: 53, longitude: 9})) < 3000000\nWITH c1, c2, sum(f.amount) as amount\nWITH c1, c2, apoc.create.vRelationship(c1, \"TRANSFER\", {amount: amount}, c2) as t\n\nMATCH path=(c2:Country)-[r]-(e:Entity)\nRETURN c1, t, c2, collect(path)[0..10]", - "width": "6", - "type": "graph", - "height": 2, - "selection": { - "Country": "name", - "Entity": "name" - }, - "settings": { - "nodePositions": {} - } - } - ] - }, - { - "title": "Entities", - "reports": [ - { - "x": 0, - "y": 0, - "title": "Entity Investigator 🔎", - "query": "You can use this page to explore information about a single entity in the dataset. All reports are automatically updated based on the selected entity.\n\n**Hint**: Try typing **ING Bank NV** \nin the \"Entity name\" box to the right of this text.\n\n\n", - "width": 3, - "type": "text", - "height": 2, - "selection": {}, - "settings": {} + "settings": { + "nodePositions": {} }, - { - "x": 3, - "y": 0, - "title": "Select an entity to view reports", - "query": "MATCH (n:`Entity`) \nWHERE toLower(toString(n.`name`)) CONTAINS toLower($input) \nRETURN DISTINCT n.`name` as value LIMIT 5", - "width": 3, - "type": "select", - "height": 2, - "selection": {}, - "settings": { - "type": "Node Property", - "entityType": "Entity", - "propertyType": "name", - "parameterName": "neodash_entity_name" - } + "id": "a4f84cff-996b-4bfd-b5de-2d8f0c9aa8b1", + "schema": [ + ["Country", "code", "name", "location", "tld"], + ["TRANSFER", "amount"], + ["Entity", "name", "location", "id", "country"] + ] + } + ] + }, + { + "title": "Entities", + "reports": [ + { + "x": 0, + "y": 0, + "title": "Entity Investigator 🔎", + "query": "You can use this page to explore information about a single entity in the dataset. All reports are automatically updated based on the selected entity.\n\n**Hint**: Try typing **ING Bank NV** \nin the \"Entity name\" box to the right of this text.\n\n\n", + "width": 6, + "type": "text", + "height": 4, + "selection": {}, + "settings": {}, + "id": "e33482d3-a7a2-4090-8868-0ed3931bc99e" + }, + { + "x": 6, + "y": 0, + "title": "Select an entity to view reports", + "query": "MATCH (n:`Entity`) \nWHERE toLower(toString(n.`name`)) CONTAINS toLower($input) \nRETURN DISTINCT n.`name` as value, n.`name` as display ORDER BY size(toString(value)) ASC LIMIT 5", + "width": 5, + "type": "select", + "height": 4, + "selection": {}, + "settings": { + "type": "Node Property", + "entityType": "Entity", + "propertyType": "name", + "parameterName": "neodash_entity_name" + }, + "id": "5a5a46cb-d586-4831-88bc-b193edfa9e9c" + }, + { + "x": 11, + "y": 0, + "title": "Details ", + "query": " MATCH (e:Entity)\nWHERE e.name = $neodash_entity_name\nWITH e LIMIT 1\nMATCH (c:Country)--(e)--(f:Filing)\nWITH e, c, sum(f.amount) AS totalAmount, min(f.begin) AS startOperation\nWITH e, c, totalAmount, startOperation\nRETURN e.name as `Entity full name`,\n c.name as `Country of origin`,\n \"$\" + toInteger(totalAmount/1000000) + \" million\" as `Total filings`,\n toString(date(startOperation)) as `Start of operations`\n", + "width": 7, + "type": "table", + "height": 4, + "selection": {}, + "settings": { + "compact": false + }, + "id": "6e2e57b7-09c8-46cf-b33e-19fd3645693b", + "schema": [] + }, + { + "x": 18, + "y": 0, + "title": "Entity interactions", + "query": "MATCH path=(e:Entity)<--()-->(e2:Entity)\nWHERE e.name = $neodash_entity_name\nWITH DISTINCT e, e2\nRETURN e, e2, apoc.create.vRelationship(e, \"INTERACTS\", {}, e2) \n\n\n", + "width": 6, + "type": "map", + "height": 4, + "selection": { + "Entity": "(no label)", + "INTERACTS": "(label)" }, - { - "x": 6, - "y": 0, - "title": "Details ", - "query": "MATCH (e:Entity)\nWHERE e.name = $neodash_entity_name\nWITH e LIMIT 1\nMATCH (c:Country)--(e)--(f:Filing)\nWITH [\"Entity full name: \" + e.name, \n \"Country of origin: \"+c.name, \n \"Total filings: $\"+ toInteger(sum(f.amount)/1000000) + \" million\",\n \"Start of operations: \"+ toString(date((min(f.begin))))\n] as data\nUNWIND data as Information\nRETURN Information\n", - "width": "3", - "type": "table", - "height": 2, - "selection": {}, - "settings": {} + "settings": { + "hideSelections": true }, - { - "x": 9, - "y": 0, - "title": "Entity interactions", - "query": "MATCH path=(e:Entity)<--()-->(e2:Entity)\nWHERE e.name = $neodash_entity_name\nWITH DISTINCT e, e2\nRETURN e, e2, apoc.create.vRelationship(e, \"INTERACTS\", {}, e2) \n\n\n", - "width": 3, - "type": "map", - "height": 2, - "selection": { - "Entity": "(no label)" - }, - "settings": { - "hideSelections": true - } + "id": "6070f205-23ce-42bb-abc1-96ec3839e531", + "schema": [["Entity", "name", "location", "id", "country"], ["INTERACTS"]] + }, + { + "x": 0, + "y": 4, + "title": "Who receives most money from this entity?", + "query": "MATCH path=(e:Entity)<--(f:Filing)-->(e2:Entity)\nWHERE e.name = $neodash_entity_name\nWITH DISTINCT e, f, e2\nRETURN e2.name as `Other`, sum(f.amount) as Amount\nORDER BY Amount ASC", + "width": 12, + "type": "bar", + "height": 4, + "selection": { + "index": "Other", + "value": "Amount", + "key": "(none)" }, - { - "x": 0, - "y": 2, - "title": "Who receives most money from this entity?", - "query": "MATCH path=(e:Entity)<--(f:Filing)-->(e2:Entity)\nWHERE e.name = $neodash_entity_name\nWITH DISTINCT e, f, e2\nRETURN e2.name as `Other`, sum(f.amount) as Amount\nORDER BY Amount ASC", - "width": "6", - "type": "bar", - "height": 2, - "selection": { - "index": "Other", - "value": "Amount", - "key": "(none)" - }, - "settings": { - "valueScale": "linear", - "marginLeft": 90, - "marginBottom": 100, - "marginRight": 50, - "colors": "paired", - "groupMode": "grouped" - } + "settings": { + "valueScale": "linear", + "marginLeft": 90, + "marginBottom": 100, + "marginRight": 50, + "colors": "paired", + "groupMode": "grouped" }, - { - "x": 6, - "y": 2, - "title": "Details on a filing by the entity", - "query": "MATCH path=(e:Entity)<--(f:Filing)\nWHERE e.name = $neodash_entity_name\nRETURN f LIMIT 1\n", - "width": 3, - "type": "json", - "height": 2, - "selection": {}, - "settings": {} + "id": "7023ae0c-68af-4fa6-8c59-3ba91d7980aa" + }, + { + "x": 12, + "y": 4, + "title": "Details on a filing by the entity", + "query": "MATCH path=(e:Entity)<--(f:Filing)\nWHERE e.name = $neodash_entity_name\nRETURN f LIMIT 1\n", + "width": 6, + "type": "json", + "height": 4, + "selection": {}, + "settings": {}, + "id": "ceb4d37e-8d9c-45c9-9062-485d40bed6cd" + }, + { + "x": 18, + "y": 4, + "title": "Number of Filings", + "query": "MATCH (e:Entity)--(:Filing)\nWHERE e.name = $neodash_entity_name\nRETURN COUNT(*)\n\n", + "width": 6, + "type": "value", + "height": 4, + "selection": {}, + "settings": { + "fontSize": 80 + }, + "id": "0efecd19-10ea-4475-b649-19b3b1b1e511" + } + ] + }, + { + "title": "Statistics", + "reports": [ + { + "x": 0, + "y": 0, + "title": "Total number of nodes", + "query": "MATCH (n)\nRETURN COUNT(n)", + "width": 6, + "type": "value", + "height": 4, + "selection": {}, + "settings": { + "textAlign": "center", + "fontSize": 80, + "marginTop": 50 }, - { - "x": 9, - "y": 2, - "title": "Number of Filings", - "query": "MATCH (e:Entity)--(:Filing)\nWHERE e.name = $neodash_entity_name\nRETURN COUNT(*)\n\n", - "width": 3, - "type": "value", - "height": 2, - "selection": {}, - "settings": { - "fontSize": 80 - } - } - ] - }, - { - "title": "Statistics", - "reports": [ - { - "x": 0, - "y": 0, - "title": "Total number of nodes", - "query": "MATCH (n)\nRETURN COUNT(n)", - "width": 3, - "type": "value", - "height": 2, - "selection": {}, - "settings": { - "textAlign": "center", - "fontSize": 80, - "marginTop": 50 - } + "id": "073fc2f0-c1a8-4206-ac48-53171ed98696" + }, + { + "x": 6, + "y": 0, + "title": "Total number of relationships", + "query": "MATCH (n)-[e]->(m)\nRETURN COUNT(e)\n\n\n", + "width": 6, + "type": "value", + "height": 4, + "selection": {}, + "settings": { + "fontSize": 80, + "marginTop": 50, + "textAlign": "center" }, - { - "x": 3, - "y": 0, - "title": "Total number of relationships", - "query": "MATCH (n)-[e]->(m)\nRETURN COUNT(e)\n\n\n", - "width": 3, - "type": "value", - "height": 2, - "selection": {}, - "settings": { - "fontSize": 80, - "marginTop": 50, - "textAlign": "center" - } + "id": "294a7cc4-bd1e-4d6f-b440-16e9ad9a95f8" + }, + { + "x": 12, + "y": 0, + "title": "Number of nodes by label", + "query": "MATCH (n)\nRETURN labels(n), count(*) as count\nORDER BY count ASC\n\n\n", + "width": 6, + "type": "pie", + "height": 4, + "selection": { + "index": "labels(n)", + "value": "count", + "key": "(none)" }, - { - "x": 6, - "y": 0, - "title": "Number of nodes by label", - "query": "MATCH (n)\nRETURN labels(n), count(*) as count\nORDER BY count ASC\n\n\n", - "width": 3, - "type": "pie", - "height": 2, - "selection": { - "index": "labels(n)", - "value": "count", - "key": "(none)" - }, - "settings": { - "colors": "pastel1", - "marginBottom": 60 - } + "settings": { + "colors": "pastel1", + "marginBottom": 60 }, - { - "x": 9, - "y": 0, - "title": "Number of relationship types", - "query": "MATCH (n)-[e]->(m)\nRETURN type(e),count(*) as count\nORDER BY count ASC\n\n\n\n\n\n\n", - "width": 3, - "type": "pie", - "height": 2, - "selection": { - "index": "type(e)", - "value": "count", - "key": "(none)" - }, - "settings": { - "colors": "pastel1", - "marginBottom": 60, - "marginLeft": 120, - "marginRight": 120 - } + "id": "bb995076-94b4-4e58-822b-19d4f8c62ac8" + }, + { + "x": 18, + "y": 0, + "title": "Number of relationship types", + "query": "MATCH (n)-[e]->(m)\nRETURN type(e),count(*) as count\nORDER BY count ASC\n\n\n\n\n\n\n", + "width": 6, + "type": "pie", + "height": 4, + "selection": { + "index": "type(e)", + "value": "count", + "key": "(none)" }, - { - "x": 0, - "y": 2, - "title": "Number of filing per year", - "query": "MATCH (f:Filing)\nWHERE f.begin IS NOT NULL\nWITH f, date(f.begin).year as Year\nRETURN Year, COUNT(f) as Total\nORDER BY Year ASC\n", - "width": 6, - "type": "line", - "height": 2, - "selection": { - "x": "Year", - "value": [ - "Total" - ] - }, - "settings": { - "marginLeft": 60 - } + "settings": { + "colors": "pastel1", + "marginBottom": 60, + "marginLeft": 120, + "marginRight": 120 }, - { - "x": 6, - "y": 2, - "title": "Example: using iFrames to embed custom visualizations (3D graph)", - "query": "https://vasturiano.github.io/react-force-graph/example/basic/", - "width": 6, - "type": "iframe", - "height": 2, - "selection": {}, - "settings": {} - } - ] - } - ] - } \ No newline at end of file + "id": "6b604fad-6104-49e7-9aea-0a878a887e49" + }, + { + "x": 0, + "y": 4, + "title": "Number of filing per year", + "query": "MATCH (f:Filing)\nWHERE f.begin IS NOT NULL\nWITH f, date(f.begin).year as Year\nRETURN Year, COUNT(f) as Total\nORDER BY Year ASC\n", + "width": 12, + "type": "line", + "height": 4, + "selection": { + "x": "Year", + "value": ["Total"] + }, + "settings": { + "marginLeft": 60 + }, + "id": "93ce2eab-4f7e-4e6e-a71e-257ebf5f68a9" + }, + { + "x": 12, + "y": 4, + "title": "Example: using iFrames to embed custom visualizations (3D graph)", + "query": "https://vasturiano.github.io/react-force-graph/example/basic/", + "width": 12, + "type": "iframe", + "height": 4, + "selection": {}, + "settings": {}, + "id": "94463630-ed46-4cbe-b140-316151e23ed1" + } + ] + } + ], + "extensions": { + "advanced-charts": { + "active": true + }, + "styling": { + "active": true + }, + "active": true, + "activeReducers": [] + } +} From 8d901bebac20b9fc77747fad218c897d956bf6c9 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Tue, 7 May 2024 11:32:32 +0200 Subject: [PATCH 083/120] Release prep --- .github/workflows/master-deployment.yml | 4 ++-- Dockerfile | 2 +- changelog.md | 7 +++++++ .../ROOT/pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 11 +++++------ src/modal/AboutModal.tsx | 2 +- 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index c7c3afe16..6826027eb 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.6 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.7 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.6 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.7 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 1e78a8511..5f8abb829 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.6" +LABEL version="2.4.7" diff --git a/changelog.md b/changelog.md index aceee2e41..de5f52901 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,10 @@ +## NeoDash 2.4.7 +This is a minor release containing a few critical fixes and general code quality improvements: + +- Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)). +- Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)). +- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). + ## NeoDash 2.4.6 This is a minor release containing a few critical fixes and some extra style customizations: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 6fadeb4b7..05ed41604 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.6 username@host:/usr/share/nginx/html +scp neodash-2.4.7 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index f97d7fa5a..e5f7357dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.6", + "version": "2.4.7", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index d8b929222..dfe4b854f 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,7 +1,6 @@ -## NeoDash 2.4.6 -This is a minor release containing a few critical fixes and some extra style customizations: +## NeoDash 2.4.7 +This is a minor release containing a few critical fixes and general code quality improvements: -- Fix bad text wrapping for arrays in tables ([868](https://github.com/neo4j-labs/neodash/pull/868)). -- Make wrapping in table optional, disabled by default ([872](https://github.com/neo4j-labs/neodash/pull/872)). -- Fixed issues where cross database dashboard sharing always reverted back to the default database ([873](https://github.com/neo4j-labs/neodash/pull/873)). -- Added option to define style config using environment variables for the Docker image ([876](https://github.com/neo4j-labs/neodash/pull/876)). \ No newline at end of file +- Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)). +- Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)). +- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). \ No newline at end of file diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index 826b032d5..bda365175 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.6'; +export const version = '2.4.7'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From ce7a21dc70a433a190bd81a5041a62d7fe2a6dac Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Tue, 7 May 2024 15:46:16 +0200 Subject: [PATCH 084/120] Add contributors to release notes --- changelog.md | 5 +++++ release-notes.md | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index de5f52901..a41402a34 100644 --- a/changelog.md +++ b/changelog.md @@ -4,6 +4,11 @@ This is a minor release containing a few critical fixes and general code quality - Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)). - Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)). - Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). + +Thanks to all the contributors for this release: +- [alfredorubin96](https://github.com/alfredorubin96), +- [MariusC](https://github.com/mariusconjeaud), +- [elizarp](https://github.com/elizarp). ## NeoDash 2.4.6 This is a minor release containing a few critical fixes and some extra style customizations: diff --git a/release-notes.md b/release-notes.md index dfe4b854f..a5f0da386 100644 --- a/release-notes.md +++ b/release-notes.md @@ -3,4 +3,9 @@ This is a minor release containing a few critical fixes and general code quality - Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)). - Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)). -- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). \ No newline at end of file +- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). + +Thanks to all the contributors for this release: +- [alfredorubin96](https://github.com/alfredorubin96), +- [MariusC](https://github.com/mariusconjeaud), +- [elizarp](https://github.com/elizarp). \ No newline at end of file From 3ae7632a56fcc808434a242fe098c03db408eb85 Mon Sep 17 00:00:00 2001 From: alfredorubin96 Date: Fri, 10 May 2024 14:29:14 +0200 Subject: [PATCH 085/120] fixing string edge case at param loading --- src/settings/SettingsThunks.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/settings/SettingsThunks.ts b/src/settings/SettingsThunks.ts index 9a225089d..7d17ba7ce 100644 --- a/src/settings/SettingsThunks.ts +++ b/src/settings/SettingsThunks.ts @@ -61,7 +61,6 @@ export const updateGlobalParametersThunk = (newParameters) => (dispatch: any, ge try { const { settings } = getState().dashboard; const parameters = settings.parameters ? settings.parameters : {}; - // if new parameters are set... if (newParameters) { // iterate over the key value pairs in parameters @@ -91,8 +90,14 @@ export const updateParametersToNeo4jTypeThunk = () => (dispatch: any, getState: // iterate over the key value pairs in parameters Object.keys(parameters).forEach((key) => { if (isCastableToNeo4jDate(parameters[key])) { + console.log(key, 'date'); parameters[key] = castToNeo4jDate(parameters[key]); - } else if (parameters[key] && typeof toNumber(parameters[key]) === 'number') { + } else if ( + parameters[key] && + !isNaN(toNumber(parameters[key])) && + typeof toNumber(parameters[key]) === 'number' + ) { + console.log(key, 'number'); parameters[key] = toNumber(parameters[key]); } else if (parameters[key] == undefined) { delete parameters[key]; From d165ccee04dd2e29e09197d5096517235c607091 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Mon, 13 May 2024 10:23:06 +0200 Subject: [PATCH 086/120] Fix: Default rel width applied on missing property value --- src/chart/graph/util/RecordUtils.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/chart/graph/util/RecordUtils.ts b/src/chart/graph/util/RecordUtils.ts index b8d853d33..f2d6dd4d6 100644 --- a/src/chart/graph/util/RecordUtils.ts +++ b/src/chart/graph/util/RecordUtils.ts @@ -69,9 +69,10 @@ function extractGraphEntitiesFromField( source: value.start.low, target: value.end.low, type: value.type, - width: !Number.isNaN(value.properties[relWidthProperty]) - ? toNumber(value.properties[relWidthProperty]) - : defaultRelWidth, + width: + value.properties[relWidthProperty] !== undefined && !Number.isNaN(value.properties[relWidthProperty]) + ? toNumber(value.properties[relWidthProperty]) + : defaultRelWidth, color: value.properties[relColorProperty] ? value.properties[relColorProperty] : defaultRelColor, properties: value.properties, }); From e8b85bd320321ce1ed53a7b1015c7611558deb36 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 13 May 2024 10:42:13 +0200 Subject: [PATCH 087/120] Update release notes --- .github/workflows/master-deployment.yml | 4 ++-- Dockerfile | 2 +- changelog.md | 10 ++++++++++ .../ROOT/pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 12 +++++------- src/modal/AboutModal.tsx | 2 +- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index 6826027eb..55cf525c4 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.7 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.8 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.7 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.8 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 5f8abb829..44320dcaf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.7" +LABEL version="2.4.8" diff --git a/changelog.md b/changelog.md index a41402a34..ae99c6f96 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,13 @@ +## NeoDash 2.4.8 +This is a minor release containing an important fix and other minor fixes: + +- Fixed a bug where loading a dashboard would reset parameters to null ([887](https://github.com/neo4j-labs/neodash/pull/887)). +- Fix relationship width parameter for Graph report ([889](https://github.com/neo4j-labs/neodash/pull/889)). + +Thanks to all the contributors for this release: +- [alfredorubin96](https://github.com/alfredorubin96), +- [nielsdejong](https://github.com/nielsdejong). + ## NeoDash 2.4.7 This is a minor release containing a few critical fixes and general code quality improvements: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 05ed41604..a5f2fd529 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.7 username@host:/usr/share/nginx/html +scp neodash-2.4.8 username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index e5f7357dc..c3886272b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.7", + "version": "2.4.8", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index a5f0da386..ea7c80484 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,11 +1,9 @@ -## NeoDash 2.4.7 -This is a minor release containing a few critical fixes and general code quality improvements: +## NeoDash 2.4.8 +This is a minor release containing an important fix and other minor fixes: -- Fix multiple parameter select ([881](https://github.com/neo4j-labs/neodash/pull/881)). -- Fix parameter casting error when loading dashboards([874](https://github.com/neo4j-labs/neodash/pull/874)). -- Fix the fraud demo in the [Example Gallery](https://neodash-gallery.graphapp.io/). +- Fixed a bug where loading a dashboard would reset parameters to null ([887](https://github.com/neo4j-labs/neodash/pull/887)). +- Fix relationship width parameter for Graph report ([889](https://github.com/neo4j-labs/neodash/pull/889)). Thanks to all the contributors for this release: - [alfredorubin96](https://github.com/alfredorubin96), -- [MariusC](https://github.com/mariusconjeaud), -- [elizarp](https://github.com/elizarp). \ No newline at end of file +- [nielsdejong](https://github.com/nielsdejong). \ No newline at end of file diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index bda365175..f7d8e40c1 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.7'; +export const version = '2.4.8'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From 546b6ae20a4d180cc8e58ca13d93367b01e6769f Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 13 May 2024 10:46:37 +0200 Subject: [PATCH 088/120] Remove console prints --- src/settings/SettingsThunks.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/settings/SettingsThunks.ts b/src/settings/SettingsThunks.ts index 7d17ba7ce..319993a1a 100644 --- a/src/settings/SettingsThunks.ts +++ b/src/settings/SettingsThunks.ts @@ -90,14 +90,12 @@ export const updateParametersToNeo4jTypeThunk = () => (dispatch: any, getState: // iterate over the key value pairs in parameters Object.keys(parameters).forEach((key) => { if (isCastableToNeo4jDate(parameters[key])) { - console.log(key, 'date'); parameters[key] = castToNeo4jDate(parameters[key]); } else if ( parameters[key] && !isNaN(toNumber(parameters[key])) && typeof toNumber(parameters[key]) === 'number' ) { - console.log(key, 'number'); parameters[key] = toNumber(parameters[key]); } else if (parameters[key] == undefined) { delete parameters[key]; From 9223cf2ad78ceaba44000cf0858f6627f711ef40 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 13 May 2024 15:50:47 +0200 Subject: [PATCH 089/120] Add a dependabot config file --- .github/dependabot.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..20d120481 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: 'yarn' + directory: '/' + schedule: + interval: 'weekly' + target-branch: 'develop' + + - package-ecosystem: 'yarn' + directory: '/gallery' + schedule: + interval: 'weekly' + target-branch: 'develop' From b9576bd666f530e6f0300c62997a8403229e9157 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 13 May 2024 16:03:01 +0200 Subject: [PATCH 090/120] Add docs directory to dependabot --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 20d120481..1e80d5670 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,3 +11,9 @@ updates: schedule: interval: 'weekly' target-branch: 'develop' + + - package-ecosystem: 'yarn' + directory: '/docs' + schedule: + interval: 'weekly' + target-branch: 'develop' From 27e8e97ebafe9e61ea9c0bde0c4c59379499de80 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Mon, 13 May 2024 16:04:51 +0200 Subject: [PATCH 091/120] Fix dependabot yarn to npm --- .github/dependabot.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1e80d5670..8f7a92ae3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,18 +1,18 @@ version: 2 updates: - - package-ecosystem: 'yarn' + - package-ecosystem: 'npm' directory: '/' schedule: interval: 'weekly' target-branch: 'develop' - - package-ecosystem: 'yarn' + - package-ecosystem: 'npm' directory: '/gallery' schedule: interval: 'weekly' target-branch: 'develop' - - package-ecosystem: 'yarn' + - package-ecosystem: 'npm' directory: '/docs' schedule: interval: 'weekly' From c666767ec95b15114c4091a248a7506a88678409 Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Tue, 14 May 2024 17:43:31 +0200 Subject: [PATCH 092/120] Migrate DataGrid to 7.x #850 ; Initial changes --- package.json | 2 +- src/chart/table/TableChart.tsx | 17 +++----- yarn.lock | 79 ++++++++++++++++++++++++++++++---- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index c3886272b..8db254534 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@dnd-kit/sortable": "^7.0.2", "@mui/material": "^5.12.3", "@mui/styles": "^5.12.3", - "@mui/x-data-grid": "5.17.26", + "@mui/x-data-grid": "7.4.0", "@mui/x-date-pickers": "^5.0.17", "@neo4j-cypher/react-codemirror": "^1.0.3", "@neo4j-ndl/base": "1.10.3", diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index d64633056..223b625c8 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -92,7 +92,6 @@ export const NeoTableChart = (props: ChartProps) => { const useStyles = generateClassDefinitionsBasedOnRules(styleRules); const classes = useStyles(); const tableRowHeight = compact ? TABLE_ROW_HEIGHT / 2 : TABLE_ROW_HEIGHT; - const pageSizeReducer = compact ? 3 : 1; const columnWidthsType = props.settings && props.settings.columnWidthsType ? props.settings.columnWidthsType : 'Relative (%)'; @@ -209,15 +208,10 @@ export const NeoTableChart = (props: ChartProps) => { ); }); - const availableRowHeight = (props.dimensions.height - TABLE_HEADER_HEIGHT - TABLE_FOOTER_HEIGHT) / tableRowHeight; - const tablePageSize = compact - ? Math.round(availableRowHeight) - pageSizeReducer - : Math.floor(availableRowHeight) - pageSizeReducer; - const pageNames = getPageNumbersAndNamesList(); const commonGridProps = { key: 'tableKey', - headerHeight: 32, + columnHeaderHeight: 32, density: compact ? 'compact' : 'standard', rows: rows, columns: columns, @@ -234,11 +228,10 @@ export const NeoTableChart = (props: ChartProps) => { } }, checkboxSelection: hasCheckboxes(actionsRules), - selectionModel: getCheckboxes(actionsRules, rows, props.getGlobalParameter), - onSelectionModelChange: (selection) => updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter), - pageSize: tablePageSize > 0 ? tablePageSize : 5, - rowsPerPageOptions: rows.length < 5 ? [rows.length, 5] : [5], - disableSelectionOnClick: true, + rowSelectionModel: getCheckboxes(actionsRules, rows, props.getGlobalParameter), + onRowSelectionModelChange: (selection) => updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter), + autoPageSize: true, + disableRowSelectionOnClick: true, components: { ColumnSortedDescendingIcon: () => <>, ColumnSortedAscendingIcon: () => <>, diff --git a/yarn.lock b/yarn.lock index d40d1a106..849a1db2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1313,6 +1313,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.24.0": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -2444,6 +2451,15 @@ "@mui/utils" "^5.15.11" prop-types "^15.8.1" +"@mui/private-theming@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.14.tgz#edd9a82948ed01586a01c842eb89f0e3f68970ee" + integrity sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.15.14" + prop-types "^15.8.1" + "@mui/styled-engine@^5.15.11": version "5.15.11" resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.11.tgz#040181f31910e0f66d43a5c44fe89da06b34212b" @@ -2454,6 +2470,16 @@ csstype "^3.1.3" prop-types "^15.8.1" +"@mui/styled-engine@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.14.tgz#168b154c4327fa4ccc1933a498331d53f61c0de2" + integrity sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw== + dependencies: + "@babel/runtime" "^7.23.9" + "@emotion/cache" "^11.11.0" + csstype "^3.1.3" + prop-types "^15.8.1" + "@mui/styles@^5.12.3": version "5.15.11" resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.15.11.tgz#2fc57a42eff47542924e1ba90fb188b733d295aa" @@ -2491,11 +2517,30 @@ csstype "^3.1.3" prop-types "^15.8.1" +"@mui/system@^5.15.14": + version "5.15.15" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.15.tgz#658771b200ce3c4a0f28e58169f02e5e718d1c53" + integrity sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.15.14" + "@mui/styled-engine" "^5.15.14" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" + clsx "^2.1.0" + csstype "^3.1.3" + prop-types "^15.8.1" + "@mui/types@^7.2.13": version "7.2.13" resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== +"@mui/types@^7.2.14": + version "7.2.14" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.14.tgz#8a02ac129b70f3d82f2f9b76ded2c8d48e3fc8c9" + integrity sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ== + "@mui/utils@^5.10.3": version "5.11.9" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.11.9.tgz#8fab9cf773c63ad916597921860d2344b5d4b706" @@ -2517,16 +2562,27 @@ prop-types "^15.8.1" react-is "^18.2.0" -"@mui/x-data-grid@5.17.26": - version "5.17.26" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-5.17.26.tgz#1f7fa73dd3986cf052e2fd2cb56eb4678a7bd913" - integrity sha512-eGJq9J0g9cDGLFfMmugOadZx0mJeOd/yQpHwEa5gUXyONS6qF0OhXSWyDOhDdA3l2TOoQzotMN5dY/T4Wl1KYA== +"@mui/utils@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.14.tgz#e414d7efd5db00bfdc875273a40c0a89112ade3a" + integrity sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA== dependencies: - "@babel/runtime" "^7.18.9" - "@mui/utils" "^5.10.3" - clsx "^1.2.1" + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" prop-types "^15.8.1" - reselect "^4.1.6" + react-is "^18.2.0" + +"@mui/x-data-grid@7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-7.4.0.tgz#1901f2908aca760146ccae74b064fc15462bcf63" + integrity sha512-ILu0AVqqHQf4wN/nblsJ/k7PkvlB115vQ/FEiYk7neZlc/kOJOUyst3MWMVClAecZ8+JEs476q40xd4r1CtMfw== + dependencies: + "@babel/runtime" "^7.24.0" + "@mui/system" "^5.15.14" + "@mui/utils" "^5.15.14" + clsx "^2.1.1" + prop-types "^15.8.1" + reselect "^4.1.8" "@mui/x-date-pickers@^5.0.17": version "5.0.19" @@ -5974,6 +6030,11 @@ clsx@^2.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -12160,7 +12221,7 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.1.6, reselect@^4.1.8: +reselect@^4.1.8: version "4.1.8" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== From 52064e238ed2503f96d71be8ba68c812babb842a Mon Sep 17 00:00:00 2001 From: Marius Conjeaud Date: Wed, 15 May 2024 14:49:54 +0200 Subject: [PATCH 093/120] Fix compact x wrapping --- src/chart/table/TableActionsHelper.ts | 11 ++++++----- src/chart/table/TableChart.tsx | 15 ++++++--------- src/index.pcss | 5 +++++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/chart/table/TableActionsHelper.ts b/src/chart/table/TableActionsHelper.ts index 7b946df2e..1dc3a4508 100644 --- a/src/chart/table/TableActionsHelper.ts +++ b/src/chart/table/TableActionsHelper.ts @@ -15,17 +15,17 @@ export const getCheckboxes = (actionsRules, rows, getGlobalParameter) => { // If the parameter is an array (to be expected), iterate over it to find the rows to check. if (Array.isArray(values)) { values.forEach((value) => { - rows.forEach((row, index) => { + rows.forEach((row) => { if (row[fieldName] == value) { - selection.push(index); + selection.push(row.id); } }); }); } else { // Else (special case), still check the row if it's a single value parameter. - rows.forEach((row, index) => { + rows.forEach((row) => { if (row[fieldName] == values) { - selection.push(index); + selection.push(row.id); } }); } @@ -35,7 +35,8 @@ export const getCheckboxes = (actionsRules, rows, getGlobalParameter) => { export const updateCheckBoxes = (actionsRules, rows, selection, setGlobalParameter) => { if (hasCheckboxes(actionsRules)) { - const selectedRows = rows.filter((_, i) => selection.includes(i)); + const selectedRows = rows.filter((row) => selection.includes(row.id)); + console.log(selectedRows); let rules = actionsRules.filter((rule) => rule.condition && rule.condition == 'rowCheck'); rules.forEach((rule) => { const parameterValues = selectedRows.map((row) => row[rule.value]).filter((v) => v !== undefined); diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index 223b625c8..8bfac0c6c 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -24,8 +24,6 @@ import Button from '@mui/material/Button'; import { extensionEnabled } from '../../utils/ReportUtils'; import { getCheckboxes, hasCheckboxes, updateCheckBoxes } from './TableActionsHelper'; -const TABLE_HEADER_HEIGHT = 32; -const TABLE_FOOTER_HEIGHT = 62; const TABLE_ROW_HEIGHT = 52; const HIDDEN_COLUMN_PREFIX = '__'; const theme = createTheme({ @@ -209,10 +207,13 @@ export const NeoTableChart = (props: ChartProps) => { }); const pageNames = getPageNumbersAndNamesList(); + const customStyles = { '&.MuiDataGrid-root .MuiDataGrid-footerContainer > div': { marginTop: '0px' } }; + const commonGridProps = { key: 'tableKey', columnHeaderHeight: 32, - density: compact ? 'compact' : 'standard', + rowHeight: tableRowHeight, + autoPageSize: true, rows: rows, columns: columns, columnVisibilityModel: columnVisibilityModel, @@ -230,7 +231,6 @@ export const NeoTableChart = (props: ChartProps) => { checkboxSelection: hasCheckboxes(actionsRules), rowSelectionModel: getCheckboxes(actionsRules, rows, props.getGlobalParameter), onRowSelectionModelChange: (selection) => updateCheckBoxes(actionsRules, rows, selection, props.setGlobalParameter), - autoPageSize: true, disableRowSelectionOnClick: true, components: { ColumnSortedDescendingIcon: () => <>, @@ -301,15 +301,12 @@ export const NeoTableChart = (props: ChartProps) => { {...commonGridProps} getRowHeight={() => 'auto'} sx={{ - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell': { py: '3px' }, - '&.MuiDataGrid-root--densityCompact .MuiDataGrid-cell:has(button)': { py: '0px' }, - '&.MuiDataGrid-root--densityStandard .MuiDataGrid-cell': { py: '15px' }, - '&.MuiDataGrid-root--densityComfortable .MuiDataGrid-cell': { py: '22px' }, + ...customStyles, '&.MuiDataGrid-root .MuiDataGrid-cell': { wordBreak: 'break-word' }, }} /> ) : ( - + )}
    diff --git a/src/index.pcss b/src/index.pcss index f1bd03ad2..ecb10a406 100644 --- a/src/index.pcss +++ b/src/index.pcss @@ -74,6 +74,11 @@ @apply n-ml-token-3; } + /* DataGrid overrides */ + .MuiDataGrid-footerContainer > div { + @apply n-mt-0; + } + /* Make bullet list points in Markdown card view */ .card-view ul { @apply n-list-disc n-ml-token-7; From 0432950c1fc6a21e6f67965d12d994200363d97e Mon Sep 17 00:00:00 2001 From: Monish <139316519+m-o-n-i-s-h@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:04:47 +0530 Subject: [PATCH 094/120] feat: Updated JSDoc --- src/utils/parameterUtils.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/utils/parameterUtils.ts b/src/utils/parameterUtils.ts index 22c7e2c2f..602711b2f 100644 --- a/src/utils/parameterUtils.ts +++ b/src/utils/parameterUtils.ts @@ -1,4 +1,10 @@ -export const extractAllParameterNames = (cypherQuery) => { +/** + * Extracts all parameter names from a given Cypher query string. + * + * @param {string} cypherQuery The Cypher query string to extract parameter names from. + * @returns {string[]} An array containing all extracted parameter names. + */ +export const extractAllParameterNames = (cypherQuery: string): string[] => { // A regular expression pattern to match parameter names following '$' const pattern = /\$([A-Za-z_]\w*)/g; @@ -12,7 +18,14 @@ export const extractAllParameterNames = (cypherQuery) => { return parameterNames; } -export const checkParametersNameInGlobalParameter = (parameterNames: string[], globalParameterNames: any) => { +/** + * Checks if all parameter names are present in the global parameter names. + * + * @param {string[]} parameterNames An array of parameter names to be checked. + * @param {object} globalParameterNames The object containing global parameter names to compare against. + * @returns {boolean} A boolean indicating whether all parameters are present in the global parameters. + */ +export const checkParametersNameInGlobalParameter = (parameterNames: string[], globalParameterNames: any): boolean => { for (const key of parameterNames) { if (!globalParameterNames[key] || (Array.isArray(globalParameterNames[key]) && globalParameterNames[key].length === 0) || globalParameterNames[key] === '') { return true; From 4103d7c6b37dfb54ed661ca6fc2a95aed52f5de2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:08:49 +0200 Subject: [PATCH 095/120] Bump micromatch from 4.0.5 to 4.0.8 in /gallery (#948) Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8. - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8) --- updated-dependencies: - dependency-name: micromatch dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong --- gallery/yarn.lock | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/gallery/yarn.lock b/gallery/yarn.lock index 75b7590fc..3cf3241ae 100644 --- a/gallery/yarn.lock +++ b/gallery/yarn.lock @@ -3042,7 +3042,14 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -4613,6 +4620,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" @@ -6476,11 +6490,11 @@ methods@~1.1.2: integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": From 484844e66c769458871bdabb5d5b5093ed727c40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:17:49 +0200 Subject: [PATCH 096/120] Bump webpack from 5.77.0 to 5.94.0 (#947) Bumps [webpack](https://github.com/webpack/webpack) from 5.77.0 to 5.94.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.77.0...v5.94.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 512 ++++++++++++++++++++++++++---------------------------- 1 file changed, 247 insertions(+), 265 deletions(-) diff --git a/yarn.lock b/yarn.lock index d40d1a106..d4a2a22d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2298,23 +2298,42 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" @@ -2326,13 +2345,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.17": version "0.3.18" @@ -2342,6 +2358,22 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.8", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -4491,31 +4523,10 @@ dependencies: "@types/ms" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.21.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" - integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" @@ -4595,7 +4606,7 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -4892,125 +4903,125 @@ "@typescript-eslint/types" "5.52.0" eslint-visitor-keys "^3.3.0" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" "@webpack-cli/configtest@^1.2.0": @@ -5063,25 +5074,20 @@ accessor-fn@1: resolved "https://registry.yarnpkg.com/accessor-fn/-/accessor-fn-1.4.1.tgz#ff6555ba91bbae1ba8e469bfdca6e7ee74dccc78" integrity sha512-P7yNKfmpuWLUwiRVk9RkRIPGjngemjZ7yANc0DL7otgDqEIWkEByMhShzfgQ5ZwCPEUmba4v1kOqCdGhpzY3ew== -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^8.8.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== agent-base@6: version "6.0.2" @@ -5596,25 +5602,15 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== +browserslist@^4.21.10, browserslist@^4.21.3, browserslist@^4.21.5, browserslist@^4.21.9: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" buffer-alloc-unsafe@^1.1.0: version "1.1.0" @@ -5736,11 +5732,16 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== -caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: +caniuse-lite@^1.0.30001464: version "1.0.30001546" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz" integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== +caniuse-lite@^1.0.30001646: + version "1.0.30001655" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" + integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== + canvas-color-tracker@1: version "1.2.1" resolved "https://registry.yarnpkg.com/canvas-color-tracker/-/canvas-color-tracker-1.2.1.tgz#c552872f8f254bac3e74ea4cc7fed3bb19859bf1" @@ -7104,15 +7105,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.352" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" - integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== - -electron-to-chromium@^1.4.431: - version "1.4.450" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz#df232c961ee9bf4e8980f86e96a6e9f291720138" - integrity sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw== +electron-to-chromium@^1.5.4: + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== emoji-regex@^8.0.0: version "8.0.0" @@ -7141,10 +7137,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -7220,10 +7216,10 @@ es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== es-shim-unscopables@^1.0.0: version "1.0.0" @@ -7295,10 +7291,10 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" @@ -8338,12 +8334,7 @@ got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.15: +graceful-fs@^4.1.10, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -10537,15 +10528,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== - -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -10977,6 +10963,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -12352,10 +12343,10 @@ schema-utils@^2.6.5, schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" @@ -12431,10 +12422,10 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -13051,24 +13042,24 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" -terser-webpack-plugin@^5.1.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" -terser@^5.14.1: - version "5.16.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b" - integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== +terser@^5.26.0: + version "5.31.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" + integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -13498,21 +13489,13 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -13632,10 +13615,10 @@ warning@^4.0.2: dependencies: loose-envify "^1.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -13742,33 +13725,32 @@ webpack-virtual-modules@^0.5.0: integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== webpack@^5.77.0: - version "5.77.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4" - integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== + dependencies: + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: From e2b7753f4b634046aecd86df2b996cb361af9372 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:19:11 +0200 Subject: [PATCH 097/120] Bump fast-loops from 1.1.3 to 1.1.4 in /gallery (#920) Bumps [fast-loops](https://github.com/robinweser/fast-loops) from 1.1.3 to 1.1.4. - [Commits](https://github.com/robinweser/fast-loops/commits) --- updated-dependencies: - dependency-name: fast-loops dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gallery/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gallery/yarn.lock b/gallery/yarn.lock index 3cf3241ae..2ae5707fe 100644 --- a/gallery/yarn.lock +++ b/gallery/yarn.lock @@ -4537,9 +4537,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-loops@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.3.tgz#ce96adb86d07e7bf9b4822ab9c6fac9964981f75" - integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.4.tgz#61bc77d518c0af5073a638c6d9d5c7683f069ce2" + integrity sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg== fast-shallow-equal@^1.0.0: version "1.0.0" From ca4d897d42f3121b9356ad2194663731e58df8c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:19:59 +0200 Subject: [PATCH 098/120] Bump ws from 8.12.1 to 8.17.1 (#911) Bumps [ws](https://github.com/websockets/ws) from 8.12.1 to 8.17.1. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.12.1...8.17.1) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d4a2a22d6..abed7f745 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13872,9 +13872,9 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^8.4.2: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xtend@^4.0.0: version "4.0.2" From 7b37a50e38a487c36277178016ea2f16664a34f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:23:11 +0200 Subject: [PATCH 099/120] Bump braces from 3.0.2 to 3.0.3 in /gallery (#908) Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Niels de Jong --- gallery/yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gallery/yarn.lock b/gallery/yarn.lock index 2ae5707fe..19f8d4bb9 100644 --- a/gallery/yarn.lock +++ b/gallery/yarn.lock @@ -3054,7 +3054,7 @@ braces@~3.0.2: resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-process-hrtime@^1.0.0: version "1.0.0" @@ -4613,10 +4613,10 @@ filesize@^8.0.6: resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" From 3c71fda906597213f142868d797ddd429fdd6130 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:25:21 +0200 Subject: [PATCH 100/120] Bump follow-redirects from 1.15.4 to 1.15.6 in /gallery (#831) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gallery/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gallery/yarn.lock b/gallery/yarn.lock index 19f8d4bb9..aa9a0cde5 100644 --- a/gallery/yarn.lock +++ b/gallery/yarn.lock @@ -4691,9 +4691,9 @@ flatted@^3.1.0: integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" From ad837df79622442b36d9e8cb9d13cae53b482b92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:26:06 +0200 Subject: [PATCH 101/120] Bump follow-redirects from 1.15.4 to 1.15.6 (#830) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index abed7f745..81bf347c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7988,9 +7988,9 @@ focus-lock@^0.11.6: tslib "^2.0.3" follow-redirects@^1.0.0, follow-redirects@^1.14.8: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" From 6d4e228ffc0b6e126cfd99bef80624281d0963ee Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 30 Oct 2024 09:58:54 +0100 Subject: [PATCH 102/120] Added evolution notice --- README.md | 16 ++++++++++++---- evolving.png | Bin 0 -> 223331 bytes 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 evolving.png diff --git a/README.md b/README.md index 5c4db07c9..26e65a720 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,16 @@ -## NeoDash - Neo4j Dashboard Builder -NeoDash is an open source tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports. +## NeoDash Labs - Neo4j Dashboard Builder + +![screenshot](evolving.png) + +In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) is evolving into a fully supported dashboard builder, as of the Neo4j product suite**. + +This project (NeoDash Labs) will continue to exist and contain experimental features. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. + +## About NeoDash +NeoDash is a web-based tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports. + -![screenshot](public/screenshot.png) Neodash supports presenting your data as tables, graphs, bar charts, line charts, maps and more. It contains a Cypher editor to directly write the Cypher queries that populate the reports. You can save dashboards to your database, and share them with others. @@ -79,4 +87,4 @@ If you have any questions about NeoDash, please reach out to the maintainers: - Connect with us on the [Neo4j Discord](https://neo4j.com/developer/discord/). - Create a post on the Neo4j [Community Forum](https://community.neo4j.com/). -> NeoDash is a free and open-source tool developed by the Neo4j community - not an official Neo4j product. If you have a need for a commercial agreement around training, custom extensions or other services, please contact the [Neo4j Professional Services](https://neo4j.com/professional-services/) team. \ No newline at end of file +> NeoDash Labs is a free and open-source tool developed by the Neo4j community - not an official Neo4j product. If you have a need for a commercial agreement around training, custom extensions or other services, please contact your [Neo4j Account Manager](hhttps://neo4j.com/contact-us/). \ No newline at end of file diff --git a/evolving.png b/evolving.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc85364bb342ec508a4038b8fada99e734440fc GIT binary patch literal 223331 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�<5bZ(k;>Hb3M73&6-LTutj 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 G9`Y}5w$ye2 literal 0 HcmV?d00001 From f93de63a79e99e11ec7b360aefbf6a2753c56020 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 30 Oct 2024 10:00:37 +0100 Subject: [PATCH 103/120] Fixed typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26e65a720..4edfe95b8 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![screenshot](evolving.png) -In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) is evolving into a fully supported dashboard builder, as of the Neo4j product suite**. +In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) NeoDash is evolving into a fully supported dashboard builder, as of the Neo4j product suite**. This project (NeoDash Labs) will continue to exist and contain experimental features. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. From 82880fbbb0643534e43d614f4465a8e623bc2d80 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Wed, 30 Oct 2024 10:00:59 +0100 Subject: [PATCH 104/120] Fixed typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4edfe95b8..eab8ff231 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![screenshot](evolving.png) -In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) NeoDash is evolving into a fully supported dashboard builder, as of the Neo4j product suite**. +In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) NeoDash is evolving into a fully supported dashboard builder, as part of the Neo4j product suite**. This project (NeoDash Labs) will continue to exist and contain experimental features. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. From ac3eae396f38a7f7482587390d5ede1b4f295ba7 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Mon, 11 Nov 2024 09:21:27 +0100 Subject: [PATCH 105/120] Bumped version number to 2.4.9 --- .github/workflows/master-deployment.yml | 4 ++-- Dockerfile | 2 +- changelog.md | 4 ++++ .../ROOT/pages/developer-guide/deploy-a-build.adoc | 2 +- package.json | 2 +- release-notes.md | 12 +++--------- src/modal/AboutModal.tsx | 2 +- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/.github/workflows/master-deployment.yml b/.github/workflows/master-deployment.yml index 55cf525c4..820b12d8c 100644 --- a/.github/workflows/master-deployment.yml +++ b/.github/workflows/master-deployment.yml @@ -79,7 +79,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.8 + tags: ${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_LABS_USERNAME }}/neodash:2.4.9 build-docker-legacy: needs: build-test runs-on: neodash-runners @@ -103,7 +103,7 @@ jobs: context: . file: ./Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.8 + tags: ${{ secrets.DOCKER_HUB_USERNAME }}/neodash:latest,${{ secrets.DOCKER_HUB_USERNAME }}/neodash:2.4.9 deploy-gallery: runs-on: neodash-runners strategy: diff --git a/Dockerfile b/Dockerfile index 44320dcaf..a31be8d85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,4 +44,4 @@ USER nginx EXPOSE $NGINX_PORT HEALTHCHECK cmd curl --fail "http://localhost:$NGINX_PORT" || exit 1 -LABEL version="2.4.8" +LABEL version="2.4.9" diff --git a/changelog.md b/changelog.md index ae99c6f96..c23596fba 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +## NeoDash 2.4.9 +This release adds some minor changes to documentation and resolves some open legacy issues. +- Added notice about project evolution. + ## NeoDash 2.4.8 This is a minor release containing an important fix and other minor fixes: diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index a5f2fd529..f65debfb7 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -37,7 +37,7 @@ Depending on the webserver type and version, this could be different directory. As an example - to copy the files to an nginx webserver using `scp`: ```bash -scp neodash-2.4.8 username@host:/usr/share/nginx/html +scp neodash-2.4.9-labs username@host:/usr/share/nginx/html ``` NeoDash should now be visible by visiting your (sub)domain in the browser. diff --git a/package.json b/package.json index c3886272b..7d9f0fadb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "neodash", - "version": "2.4.8", + "version": "2.4.9", "description": "NeoDash - Neo4j Dashboard Builder", "neo4jDesktop": { "apiVersion": "^1.2.0" diff --git a/release-notes.md b/release-notes.md index ea7c80484..cfdc92735 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,9 +1,3 @@ -## NeoDash 2.4.8 -This is a minor release containing an important fix and other minor fixes: - -- Fixed a bug where loading a dashboard would reset parameters to null ([887](https://github.com/neo4j-labs/neodash/pull/887)). -- Fix relationship width parameter for Graph report ([889](https://github.com/neo4j-labs/neodash/pull/889)). - -Thanks to all the contributors for this release: -- [alfredorubin96](https://github.com/alfredorubin96), -- [nielsdejong](https://github.com/nielsdejong). \ No newline at end of file +## NeoDash 2.4.9 +This release adds some minor changes to documentation and resolves some open legacy issues. +- Added notice about project evolution. diff --git a/src/modal/AboutModal.tsx b/src/modal/AboutModal.tsx index f7d8e40c1..62d4816c0 100644 --- a/src/modal/AboutModal.tsx +++ b/src/modal/AboutModal.tsx @@ -3,7 +3,7 @@ import { Button, Dialog, TextLink } from '@neo4j-ndl/react'; import { BookOpenIconOutline, BeakerIconOutline } from '@neo4j-ndl/react/icons'; import { Section, SectionTitle, SectionContent } from './ModalUtils'; -export const version = '2.4.8'; +export const version = '2.4.9-labs'; export const NeoAboutModal = ({ open, handleClose, getDebugState }) => { const downloadDebugFile = () => { From 3c0324da3e07f11edbd831e12e884823b8cf63dc Mon Sep 17 00:00:00 2001 From: Bastien Hubert <43408420+bastienhubert@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:25:36 +0100 Subject: [PATCH 106/120] Improve method for checking "low" property existence in downloadCSV function (#951) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: “Bastien <“bastien.hubert@hotmail.com”> --- src/chart/ChartUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chart/ChartUtils.ts b/src/chart/ChartUtils.ts index c88afe17a..6a2911ef4 100644 --- a/src/chart/ChartUtils.ts +++ b/src/chart/ChartUtils.ts @@ -164,7 +164,7 @@ export const downloadCSV = (rows) => { headers.forEach((header) => { // Parse value let value = row[header]; - if (value && value.low) { + if (value && 'low' in value) { value = value.low; } csv += `${JSON.stringify(value)}`; From 8d4e72c48fac7a35d9653e7741dee9f0f3f75a23 Mon Sep 17 00:00:00 2001 From: JyotsanaSingh <62237566+Jyots6914@users.noreply.github.com> Date: Mon, 11 Nov 2024 03:26:18 -0500 Subject: [PATCH 107/120] Update configuration.adoc (#946) Default loggingDatabase is logs not neo4j, updated same in document. Issue Closed : https://github.com/neo4j-labs/neodash/issues/915 Document Referred : https://github.com/neo4j-labs/neodash/blob/42b196a3ec9a1d5740e4c81420a762646b1295b7/scripts/config-entrypoint.sh#L26 https://neo4j.com/labs/neodash/2.4/developer-guide/configuration/#_configuration_options Signed-off-by: Singh, Jyotsana --- docs/modules/ROOT/pages/developer-guide/configuration.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/ROOT/pages/developer-guide/configuration.adoc b/docs/modules/ROOT/pages/developer-guide/configuration.adoc index 604ed1298..e9873a033 100644 --- a/docs/modules/ROOT/pages/developer-guide/configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/configuration.adoc @@ -133,7 +133,7 @@ must be granted to enble any user to create logs. ⚠️ * Load/Save from/to file are not logged (only from/to Database) -|loggingDatabase |string |neo4j |When loggingMode is set to anything +|loggingDatabase |string |logs |When loggingMode is set to anything else than '0', the database to use for logging. Log records (nodes) will be created in this database. From c1ea932803c7633d53c01951f1c457eeb53a6c47 Mon Sep 17 00:00:00 2001 From: LiamEdwardsLamarche <134382136+LiamEdwardsLamarche@users.noreply.github.com> Date: Mon, 11 Nov 2024 08:28:31 +0000 Subject: [PATCH 108/120] Feature/rule based styling table colouring (#944) * rule based styling cell colouring feature * changing cell text/background colour now plays nicely * TODO note about row/cell rule mix and match behaviour --- src/chart/table/TableChart.tsx | 16 +++++++++- .../styling/StyleRuleCreationModal.tsx | 29 +++++++++++++++++++ src/extensions/styling/StyleRuleEvaluator.ts | 26 ++++++++++------- 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/chart/table/TableChart.tsx b/src/chart/table/TableChart.tsx index d64633056..fbf5e6889 100644 --- a/src/chart/table/TableChart.tsx +++ b/src/chart/table/TableChart.tsx @@ -3,6 +3,7 @@ import { DataGrid, GridColumnVisibilityModel } from '@mui/x-data-grid'; import { ChartProps } from '../Chart'; import { evaluateRulesOnDict, + evaluateSingleRuleOnDict, generateClassDefinitionsBasedOnRules, useStyleRules, } from '../../extensions/styling/StyleRuleEvaluator'; @@ -243,6 +244,7 @@ export const NeoTableChart = (props: ChartProps) => { ColumnSortedDescendingIcon: () => <>, ColumnSortedAscendingIcon: () => <>, }, + // TODO: if mixing and matching row and cell styling, row rules MUST be set first or will not populate correctly getRowClassName: (params) => { return ['row color', 'row text color'] .map((e) => { @@ -253,7 +255,19 @@ export const NeoTableChart = (props: ChartProps) => { getCellClassName: (params) => { return ['cell color', 'cell text color'] .map((e) => { - return `rule${evaluateRulesOnDict({ [params.field]: params.value }, styleRules, [e])}`; + let trueRulesList = ['']; + let trueRule; + for (const [index, rule] of styleRules.entries()) { + if (rule.targetField) { + if (rule.targetField === params.field) { + trueRule = `rule${evaluateSingleRuleOnDict({ [rule.field]: params.row[rule.field] }, rule, index, [e])}`; + } + } else { + trueRule = `rule${evaluateSingleRuleOnDict({ [params.field]: params.value }, rule, index, [e])}`; + } + trueRulesList.push(trueRule); + } + return trueRulesList.join(' '); }) .join(' '); }, diff --git a/src/extensions/styling/StyleRuleCreationModal.tsx b/src/extensions/styling/StyleRuleCreationModal.tsx index 0c26c4746..a295044d5 100644 --- a/src/extensions/styling/StyleRuleCreationModal.tsx +++ b/src/extensions/styling/StyleRuleCreationModal.tsx @@ -338,6 +338,35 @@ export const NeoCustomReportStyleModal = ({ }} fluid /> + + e.toLowerCase().includes(rule.targetField) + )} + value={rule.targetField ? rule.targetField : (rule.field ? rule.field : '')} + inputValue={rule.targetField ? rule.targetField : (rule.field ? rule.field : '')} + popupIcon={<>} + style={{ minWidth: 125, visibility: rule.customization.includes("cell") ? 'visible' : 'hidden', display: rule.customization.includes("cell") ? '' : 'none' }} + onInputChange={(event, value) => { + updateRuleField(index, 'targetField', value); + }} + onChange={(event, newValue) => { + updateRuleField(index, 'targetField', newValue); + }} + renderInput={(params) => ( + + )} + /> { } for (const [index, rule] of rules.entries()) { // Only check customizations that are specified - if (customizations.includes(rule.customization)) { - // if the row contains the specified field... - if (dict[rule.field] !== undefined && dict[rule.field] !== null) { - const realValue = dict[rule.field].low ? dict[rule.field].low : dict[rule.field]; - const ruleValue = rule.value; - if (evaluateCondition(realValue, rule.condition, ruleValue)) { - return index; - } - } - } + return evaluateSingleRuleOnDict (dict, rule, index, customizations) } // If no rules are met, return not found (index=-1) return -1; }; +export const evaluateSingleRuleOnDict = (dict, rule, ruleIndex, customizations) => { + if (customizations.includes(rule.customization)) { + // if the row contains the specified field... + if (dict[rule.field] !== undefined && dict[rule.field] !== null) { + const realValue = dict[rule.field].low ? dict[rule.field].low : dict[rule.field]; + const ruleValue = rule.value; + if (evaluateCondition(realValue, rule.condition, ruleValue)) { + return ruleIndex; + } + } + } + return -1; +} + + /** * Evaluates the specified rule set on a node object returned by the Neo4j driver. * @param node - the node representation returned by the Neo4j driver. From a7a17eb2bfc43b1f4f29d0d450ad6cfc49a11d5f Mon Sep 17 00:00:00 2001 From: LiamEdwardsLamarche <134382136+LiamEdwardsLamarche@users.noreply.github.com> Date: Mon, 11 Nov 2024 08:29:22 +0000 Subject: [PATCH 109/120] Bugfix/array table wrap (#943) * table wrap bug fix * typo fix --- src/report/ReportRecordProcessing.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/report/ReportRecordProcessing.tsx b/src/report/ReportRecordProcessing.tsx index 15159b911..cae643d1e 100644 --- a/src/report/ReportRecordProcessing.tsx +++ b/src/report/ReportRecordProcessing.tsx @@ -269,16 +269,17 @@ function RenderArray(value, transposedTable = false) { mapped = value.map((v, i) => { return RenderSubValue(v) + (i < value.length - 1 ? ', ' : ''); }); + } else { + // Render Node and Relationship objects, which will look like a Path + mapped = value.map((v, i) => { + return ( + + {RenderSubValue(v)} + {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? , : <>} + + ); + }); } - // Render Node and Relationship objects, which will look like a Path - mapped = value.map((v, i) => { - return ( - - {RenderSubValue(v)} - {i < value.length - 1 && !valueIsNode(v) && !valueIsRelationship(v) ? , : <>} - - ); - }); return mapped; } From 1555b81bf3a0e48f0ec26c8a8d1e642584bcdbae Mon Sep 17 00:00:00 2001 From: geetparekh Date: Mon, 11 Nov 2024 03:30:31 -0500 Subject: [PATCH 110/120] changes to add ssl support (#935) Signed-off-by: Parekh, Geet --- ssl/Dockerfile | 25 +++++++++++++++++++++++++ ssl/default.conf | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 ssl/Dockerfile create mode 100644 ssl/default.conf diff --git a/ssl/Dockerfile b/ssl/Dockerfile new file mode 100644 index 000000000..3e362b4de --- /dev/null +++ b/ssl/Dockerfile @@ -0,0 +1,25 @@ +# build stage +FROM neo4jlabs/neodash:latest AS neodash + +ENV NGINX_HTTPS_PORT=5443 + +USER root + +RUN mkdir -p /etc/nginx/certs + +RUN --mount=type=secret,id=NEODASH_SSL_KEY \ + base64 -d /run/secrets/NEODASH_SSL_KEY > /etc/nginx/certs/key.pem + +RUN --mount=type=secret,id=NEODASH_SSL_CERT \ + base64 -d /run/secrets/NEODASH_SSL_CERT > /etc/nginx/certs/cert.pem + +COPY default.conf /etc/nginx/templates/default.conf.template +COPY default.conf /etc/nginx/conf.d/ + +RUN chown -R nginx:nginx /etc/nginx + +USER nginx +EXPOSE $NGINX_HTTPS_PORT + +HEALTHCHECK CMD curl --fail "https://localhost:$NGINX_HTTPS_PORT" || exit 1 +LABEL version="1.0" \ No newline at end of file diff --git a/ssl/default.conf b/ssl/default.conf new file mode 100644 index 000000000..547c4b214 --- /dev/null +++ b/ssl/default.conf @@ -0,0 +1,34 @@ +server { + listen ${NGINX_PORT}; + server_name localhost; + include mime.types; + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + index index.html index.htm; + } + # redirect server error pages to the static page /50x.html + # Note: This is optional, depending on the implementation in React + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} +server { + listen 5443 ssl; + ssl_certificate /etc/nginx/certs/cert.pem; + ssl_certificate_key /etc/nginx/certs/key.pem; + server_name localhost; + include mime.types; + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + index index.html index.htm; + } + # redirect server error pages to the static page /50x.html + # Note: This is optional, depending on the implementation in React + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} \ No newline at end of file From 455ee42f47e560b65e5441a33530862b06835018 Mon Sep 17 00:00:00 2001 From: alfredorubin96 <103421036+alfredorubin96@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:33:25 +0100 Subject: [PATCH 111/120] adding param to manage SSO redirection (#918) * adding param to manage SSO redirection * added standalone when not sharing credentials * Removed superfluous log statements --------- Co-authored-by: Niels de Jong --- src/application/ApplicationThunks.ts | 36 ++++++---------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/src/application/ApplicationThunks.ts b/src/application/ApplicationThunks.ts index 5076e855c..6af4b6339 100644 --- a/src/application/ApplicationThunks.ts +++ b/src/application/ApplicationThunks.ts @@ -261,7 +261,6 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { if (dashboardDatabase) { dispatch(setStandaloneDashboardDatabase(dashboardDatabase)); } - if (urlParams.get('credentials')) { setWelcomeScreenOpen(false); const connection = decodeURIComponent(urlParams.get('credentials')); @@ -271,32 +270,6 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { const database = connection.split('@')[1].split(':')[0]; const url = connection.split('@')[1].split(':')[1]; const port = connection.split('@')[1].split(':')[2]; - // if (url == password) { - // // Special case where a connect link is generated without a password. - // // Here, the format is parsed incorrectly and we open the connection window instead. - // dispatch(setConnectionProperties(protocol, url, port, database, username.split('@')[0], '')); - // dispatch( - // setShareDetailsFromUrl( - // type, - // id, - // standalone, - // protocol, - // url, - // port, - // database, - // username.split('@')[0], - // '', - // dashboardDatabase, - // true - // ) - // ); - // setDashboardToLoadAfterConnecting(id); - // window.history.pushState({}, document.title, window.location.pathname); - // dispatch(setConnectionModalOpen(true)); - // dispatch(setWelcomeScreenOpen(false)); - // // window.history.pushState({}, document.title, "/"); - // return; - // } dispatch(setConnectionModalOpen(false)); dispatch( @@ -327,7 +300,7 @@ export const handleSharedDashboardsThunk = () => (dispatch: any) => { setShareDetailsFromUrl( type, id, - undefined, + standalone, undefined, undefined, undefined, @@ -385,6 +358,7 @@ export const onConfirmLoadSharedDashboardThunk = () => (dispatch: any, getState: } if (shareDetails.standalone == true) { dispatch(setStandaloneMode(true)); + localStorage.setItem('standaloneShared', 'true'); // EDGE CASE: redirect SSO removes the shareDetails when redirecting } dispatch(resetShareDetails()); } catch (e) { @@ -455,10 +429,13 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: dispatch(setSSOEnabled(config.ssoEnabled, state.application.cachedSSODiscoveryUrl)); dispatch(setSSOProviders(config.ssoProviders)); + // Check if we are in standalone mode + // const standaloneShared = localStorage.getItem('standaloneShared') == 'true'; // EDGE case: from url param it could happen that we lose the value due to SSO redirect const { standalone } = config; + // || standaloneShared; + // if a dashboard database was previously set, remember to use it. const dashboardDatabase = state.application.standaloneDashboardDatabase; - dispatch( setStandaloneEnabled( standalone, @@ -478,6 +455,7 @@ export const loadApplicationConfigThunk = () => async (dispatch: any, getState: config.standaloneDatabaseList ) ); + localStorage.removeItem('standaloneShared'); dispatch(setLoggingMode(config.loggingMode)); dispatch(setLoggingDatabase(config.loggingDatabase)); From f88066663a85d1057b2fa097bd935d569ac31be1 Mon Sep 17 00:00:00 2001 From: Bastien Hubert <43408420+bastienhubert@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:36:30 +0100 Subject: [PATCH 112/120] Add possibility to hide Y axes and grid lines in BarChart (#895) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add possibility to hide Y axes and grid lines in BarChart * Add Husky prepare stage * Fix stacked grouped function test * Fix pie chart e2e test in start_page.cy * Add Bar chart Y axis e2e tests * Add Cypress support in eslintrc.json * Create Page helper class for Cypress * Update browserlist * Fix e2e bar tests by removing within --------- Co-authored-by: “Bastien <“bastien.hubert@hotmail.com”> Co-authored-by: Niels de Jong --- .eslintrc.json | 7 +- cypress.config.ts | 1 + cypress/Page.js | 156 +++++++++ cypress/e2e/bar_chart.cy.js | 316 ------------------ cypress/e2e/{render => charts}/array.cy.js | 77 ++--- cypress/e2e/charts/bar.cy.js | 211 ++++++++++++ cypress/e2e/{ => charts}/table.cy.js | 30 +- cypress/e2e/start_page.cy.js | 137 +++----- cypress/e2e/utils.js | 84 ----- cypress/{support => }/index.js | 2 +- cypress/support/commands.js | 84 ++--- .../developer-guide/style-configuration.adoc | 2 +- package.json | 3 +- src/chart/bar/BarChart.tsx | 18 +- src/config/ReportConfig.tsx | 12 + 15 files changed, 492 insertions(+), 648 deletions(-) create mode 100644 cypress/Page.js delete mode 100644 cypress/e2e/bar_chart.cy.js rename cypress/e2e/{render => charts}/array.cy.js (70%) create mode 100644 cypress/e2e/charts/bar.cy.js rename cypress/e2e/{ => charts}/table.cy.js (66%) delete mode 100644 cypress/e2e/utils.js rename cypress/{support => }/index.js (95%) diff --git a/.eslintrc.json b/.eslintrc.json index 6f7a0eccf..c6d98d2c6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,7 +4,8 @@ "extends": ["eslint:recommended", "prettier", "plugin:@typescript-eslint/recommended"], // this is optional "env": { "browser": true, - "node": true + "node": true, + "jest": true }, "settings": { "react": { @@ -166,5 +167,9 @@ ], "symbol-description": "error", "yoda": "error" + }, + "globals": { + "cy": "readonly", + "Cypress": "readonly" } } diff --git a/cypress.config.ts b/cypress.config.ts index 73948909e..93f8cffdf 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -5,6 +5,7 @@ export default defineConfig({ projectId: 'a8nh14', video: false, e2e: { + defaultCommandTimeout: 20000, experimentalMemoryManagement: true, numTestsKeptInMemory: 0, baseUrl: 'http://localhost:3000', diff --git a/cypress/Page.js b/cypress/Page.js new file mode 100644 index 000000000..f90742a41 --- /dev/null +++ b/cypress/Page.js @@ -0,0 +1,156 @@ +const DB_URL = 'localhost'; +const DB_USERNAME = 'neo4j'; +const DB_PASSWORD = 'test1234'; + +export class Page { + constructor(cardSelector) { + this.cardSelector = cardSelector; + } + + init() { + cy.viewport(1920, 1080); + cy.visit('/', { + onBeforeLoad(win) { + win.localStorage.clear(); + }, + }); + return this; + } + + createNewDashboard() { + cy.get('#form-dialog-title').then(($div) => { + const text = $div.text(); + if (text == 'NeoDash - Neo4j Dashboard Builder') { + cy.wait(100); + // Create new dashboard + cy.contains('New Dashboard').click(); + } + }); + return this; + } + + connectToNeo4j() { + cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); + cy.get('#url').clear().type(DB_URL); + cy.get('#dbusername').clear().type(DB_USERNAME); + cy.get('#dbpassword').type(DB_PASSWORD); + cy.get('button').contains('Connect').click(); + cy.wait(100); + return this; + } + + enableReportActions() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-actions').scrollIntoView(); + cy.get('#checkbox-actions').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(100); + return this; + } + + enableAdvancedVisualizations() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-advanced-charts').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(100); + return this; + } + + enableFormsExtension() { + cy.get('main button[aria-label="Extensions').should('be.visible').click(); + cy.get('#checkbox-forms').scrollIntoView(); + cy.get('#checkbox-forms').should('be.visible').click(); + cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); + cy.wait(100); + return this; + } + + selectReportOfType(type) { + cy.get('main .react-grid-item button[aria-label="add report"]').should('be.visible').click(); + cy.get('main .react-grid-item') + .contains('No query specified.') + .parentsUntil('.react-grid-item') + .find('button[aria-label="settings"]', { timeout: 2000 }) + .should('be.visible') + .click(); + cy.get(`${this.cardSelector} #type`, { timeout: 2000 }).should('be.visible').click(); + cy.contains(type).click(); + cy.wait(100); + return this; + } + + createReportOfType(type, query, fast = false, run = true) { + this.selectReportOfType(type); + if (fast) { + cy.get(`${this.cardSelector} .ReactCodeMirror`).type(query, { + delay: 1, + parseSpecialCharSequences: false, + }); + } else { + cy.get(`${this.cardSelector} .ReactCodeMirror`).type(query, { parseSpecialCharSequences: false }); + } + cy.wait(400); + + if (run) { + this.closeSettings(); + } + + cy.wait(100); + return this; + } + + openSettings() { + cy.get(this.cardSelector).find('button[aria-label="settings"]', { WAITING_TIME: 2000 }).click(); + cy.wait(100); + return this; + } + + closeSettings() { + cy.get(`${this.cardSelector} button[aria-label="run"]`).click(); + cy.wait(100); + return this; + } + + openAdvancedSettings() { + this.openSettings(); + cy.get(this.cardSelector).contains('Advanced settings').click(); + cy.wait(100); + return this; + } + + closeAdvancedSettings() { + cy.get(this.cardSelector).contains('Advanced settings').click(); + this.closeSettings(); + return this; + } + + openReportActionsMenu() { + this.openSettings(); + cy.get(this.cardSelector).find('button[aria-label="custom actions"]').click(); + cy.wait(100); + return this; + } + + updateDropdownAdvancedSetting(settingLabel, targetValue) { + this.openAdvancedSettings(); + cy.get(`${this.cardSelector} .ndl-dropdown`).contains(settingLabel).siblings('div').click(); + cy.contains(targetValue).click(); + this.closeAdvancedSettings(); + return this; + } + + updateChartQuery(query) { + this.openSettings(); + + cy.get(this.cardSelector) + .find('.ndl-cypher-editor div[role="textbox"]') + .should('be.visible') + .click() + .clear() + .type(query); + cy.wait(100); + + this.closeSettings(); + return this; + } +} diff --git a/cypress/e2e/bar_chart.cy.js b/cypress/e2e/bar_chart.cy.js deleted file mode 100644 index 3f9c20faa..000000000 --- a/cypress/e2e/bar_chart.cy.js +++ /dev/null @@ -1,316 +0,0 @@ -import { barChartCypherQuery } from '../fixtures/cypher_queries'; - -const WAITING_TIME = 20000; -// Ignore warnings that may appear when using the Cypress dev server -Cypress.on('uncaught:exception', (err, runnable) => { - console.log(err, runnable); - return false; -}); - -describe('Testing bar chart', () => { - beforeEach('open neodash', () => { - cy.viewport(1920, 1080); - cy.visit('/', { - onBeforeLoad(win) { - win.localStorage.clear(); - }, - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'NeoDash - Neo4j Dashboard Builder').click(); - - cy.get('#form-dialog-title').then(($div) => { - const text = $div.text(); - if (text == 'NeoDash - Neo4j Dashboard Builder') { - cy.wait(500); - // Create new dashboard - cy.contains('New Dashboard').click(); - } - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); - - cy.get('#url').clear().type('localhost'); - cy.get('#dbusername').clear().type('neo4j'); - cy.get('#dbpassword').type('test1234'); - cy.get('button').contains('Connect').click(); - cy.wait(100); - - //Opens the div containing all report cards - cy.get('.react-grid-layout:eq(0)').within(() => { - //Finds the 2nd card - cy.get('.MuiGrid-root') - .eq(1) - .within(() => { - //Clicks the 2nd button (opens settings) - cy.get('button').eq(1).click(); - }); - }); - cy.get('.react-grid-layout:eq(0)').within(() => { - //Finds the 2nd card - cy.get('.MuiGrid-root') - .eq(1) - .within(() => { - //Opens the drop down - cy.getDataTest('type-dropdown').click(); - }); - }); - // Selects the Bar option - cy.get('[id^="react-select-5-option"]') - .contains(/Bar Chart/i) - .should('be.visible') - .click({ force: true }); - cy.get('.react-grid-layout .MuiGrid-root:eq(1) #type input[name="Type"]').should('have.value', 'Bar Chart'); - - // Creates basic bar chart - cy.get('.react-grid-layout') - .first() - .within(() => { - //Finds the 2nd card - cy.get('.MuiGrid-root') - .eq(1) - .within(() => { - //Removes text in cypher editor and types new query - cy.get('.ndl-cypher-editor div[role="textbox"]') - .should('be.visible') - .click() - .clear() - .type(barChartCypherQuery); - - cy.wait(400); - cy.get('button[aria-label="run"]').click(); - }); - }); - - cy.wait(500); - }); - - it.skip('Checking Colour Picker settings', () => { - //Opens advanced settings - cy.get('.react-grid-layout') - .first() - .within(() => { - //Finds the 2nd card - cy.get('.MuiGrid-root') - .eq(1) - .within(() => { - // Access advanced settings - cy.get('button').eq(1).click(); - cy.get('[role="switch"]').click(); - cy.wait(200); - // Changing setting for colour picker - cy.get('[data-testid="colorpicker-input"]').find('input').click().type('{selectall}').type('red'); - cy.get('button[aria-label="run"]').click(); - // Checking that colour picker was applied correctly - cy.get('.card-view').should('have.css', 'background-color', 'rgb(255, 0, 0)'); - cy.wait(200); - // Changing colour back to white - cy.get('button').eq(1).click(); - cy.get('[data-testid="colorpicker-input"]').find('input').click().type('{selectall}').type('white'); - cy.get('button[aria-label="run"]').click(); - // Checking colour has been set back to white - cy.wait(200); - cy.get('.card-view').should('have.css', 'background-color', 'rgb(255, 255, 255)'); - }); - }); - }); - - it.skip('Checking Selector Description', () => { - //Opens first 2nd card - cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { - // Access advanced settings - cy.get('button').eq(1).click(); - cy.get('[role="switch"]').click(); - cy.wait(200); - // Changing Selector Description to 'Test' - cy.get('.ndl-textarea').contains('span', 'Selector Description').click().type('Test'); - cy.get('button[aria-label="run"]').click(); - // Pressing Selector Description button - cy.get('button[aria-label="details"]').click(); - }); - // Checking that Selector Description is behaving as expected - cy.get('.MuiDialog-paper').should('be.visible').and('contain.text', 'Test'); - cy.wait(1000); - - // Click elsewhere on the page to close dialog box - cy.get('div[role="dialog"]').parent().click(-100, -100, { force: true }); - }); - - it.skip('Checking full screen bar chart setting', () => { - //Opens first 2nd card - cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { - // Opening settings - cy.get('button').eq(1).click(); - // Activating advanced settings - cy.get('[role="switch"]').click(); - cy.wait(200); - // Finding fullscreen setting and changing it to 'on' - cy.get('.ndl-dropdown') - .contains('label', 'Fullscreen enabled') - .scrollIntoView() - .should('be.visible') - .click() - .type('on{enter}'); - // Pressing run to return to card view - cy.get('button[aria-label="run"]').click(); - cy.get('button[aria-label="maximize"]').click(); - }); - // Modal outside of scope of card - // Checking existence of full-screen modal - cy.get('.dialog-xxl').should('be.visible'); - // Action to close full-screen modal - cy.get('button[aria-label="un-maximize"]').click(); - // Checking that fullscreen has un-maximized - // Check that the div is no longer in the DOM - cy.get('div[data-focus-lock-disabled="false"]').should('not.exist'); - }); - - it.skip('Checking "Autorun Query" works as intended', () => { - // Custom command to open advanced settings - cy.advancedSettings(() => { - // Finding 'Auto-run query setting and changing it to 'off' - cy.get('.ndl-dropdown') - .contains('label', 'Auto-run query') - .scrollIntoView() - .should('be.visible') - .click() - .type('off{enter}'); - cy.wait(200); - cy.get('button[aria-label="run"]').click(); - cy.get('.ndl-cypher-editor').should('be.visible'); - cy.get('g').should('not.exist'); - cy.wait(100); - cy.get('.MuiCardContent-root').find('button[aria-label="run"]').filter(':visible').click(); - cy.get('g').should('exist'); - }); - }); - - it.skip('Checking Legend integration works as intended', () => { - cy.advancedSettings(() => { - // Checking that legend appears - cy.setDropdownValue('Show Legend', 'on'); - cy.wait(100); - cy.get('button[aria-label="run"]').click(); - cy.wait(100); - //Checking that legend matches value specified: in the case - 'count' - cy.get('svg g g text').last().contains(/count/i); - }); - cy.advancedSettings(() => { - // Activating advanced settings - cy.get('[role="switch"]').click(); - // Checking that legend disappears - cy.setDropdownValue('Show Legend', 'off'); - cy.wait(100); - cy.get('button[aria-label="run"]').click(); - cy.wait(100); - cy.get('svg g g text').last().contains(/count/i).should('not.exist'); - }); - }); - - it.skip('Checking the stacked grouping function works as intended', () => { - cy.advancedSettings(() => { - cy.get('.ndl-cypher-editor div[role="textbox"]') - .should('be.visible') - .click() - .clear() - .type( - 'MATCH (p:Person)-[:DIRECTED]->(n:Movie) RETURN n.released AS released, p.name AS Director, count(n.title) AS count LIMIT 5' - ); - cy.setDropdownValue('Grouping', 'on'); - cy.wait(100); - cy.get('button[aria-label="run"]').click(); - cy.get('.ndl-dropdown:contains("Group")').find('svg').parent().click().type('Director{enter}'); - // Checking that the groups are stacked - cy.get('.MuiCardContent-root') - .find('g') - .children('g') - .eq(3) // Get the fourth g element (index starts from 0) - .invoke('attr', 'transform') - .then((transformValue) => { - // Captures the first number in the tranlsate attribute using the parenthisis to capture the first digit and put it in the second value of the resulting array - // if transformValue is translate(100,200), then transformValue.match(/translate\((\d+),\d+\)/) will produce an array like ["translate(100,200)", "100"], - const match = transformValue.match(/translate\((\d+),\d+\)/); - if (match?.[1]) { - const xValue = match[1]; - console.log('xValue: ', xValue); - - // Now find sibling g elements with the same x transform value - cy.get('.MuiCardContent-root') - .find('g') - .children('g') - .filter((index, element) => { - const siblingTransform = Cypress.$(element).attr('transform'); - return siblingTransform?.includes(`translate(${xValue},`); - }) - .should('have.length', 3); // Check that there's at least one element - } else { - throw new Error('Transform attribute not found or invalid format'); - } - }); - }); - cy.get('.ndl-dropdown:contains("Group")').find('svg').parent().click().type('(none){enter}'); - // Checking that the stacked grouped elements do not exist - cy.get('.MuiCardContent-root') - .find('g') - .children('g') - .eq(3) // Get the fourth g element (index starts from 0) - .invoke('attr', 'transform') - .then((transformValue) => { - // Captures the first number in the tranlsate attribute using the parenthisis to capture the first digit and put it in the second value of the resulting array - // if transformValue is translate(100,200), then transformValue.match(/translate\((\d+),\d+\)/) will produce an array like ["translate(100,200)", "100"], - const match = transformValue.match(/translate\((\d+),\d+\)/); - if (match?.[1]) { - const xValue = match[1]; - console.log('xValue: ', xValue); - - // Now find sibling g elements with the same x transform value - cy.get('.MuiCardContent-root') - .find('g') - .children('g') - .filter((index, element) => { - const siblingTransform = Cypress.$(element).attr('transform'); - return siblingTransform?.includes(`translate(${xValue},`); - }) - .should('have.length', 1); // Check that there are no matching elements - } else { - throw new Error('Transform attribute not found or invalid format'); - } - }); - }); - - // How to properly test this? - it.skip('Testing grouped grouping mode', () => { - cy.advancedSettings(() => { - cy.get('.ndl-cypher-editor div[role="textbox"]') - .should('be.visible') - .click() - .clear() - .type( - 'MATCH (p:Person)-[:DIRECTED]->(n:Movie) RETURN n.released AS released, p.name AS Director, count(n.title) AS count LIMIT 5' - ); - cy.setDropdownValue('Grouping', 'on'); - cy.setDropdownValue('Group Mode', 'grouped'); - cy.wait(400); - cy.get('button[aria-label="run"]').click(); - cy.get('.ndl-dropdown:contains("Group")').find('svg').parent().click().type('Director{enter}'); - }); - }); - - it.skip('Testing "Show Value on Bars"', () => { - cy.advancedSettings(() => { - cy.setDropdownValue('Show Values On Bars', 'on'); - cy.get('button[aria-label="run"]').click(); - cy.get('.MuiCardContent-root') - .find('div svg > g > g > text') - .should('have.length', 5) - .then((textElements) => { - cy.log('Number of text elements:', textElements.length); - }); - }); - cy.wait(100); - cy.openSettings(() => { - cy.setDropdownValue('Show Values On Bars', 'off'); - cy.get('button[aria-label="run"]').click(); - cy.get('.MuiCardContent-root').find('div svg > g > g > text').should('not.exist'); - }); - }); -}); diff --git a/cypress/e2e/render/array.cy.js b/cypress/e2e/charts/array.cy.js similarity index 70% rename from cypress/e2e/render/array.cy.js rename to cypress/e2e/charts/array.cy.js index 108d4aceb..1da231f01 100644 --- a/cypress/e2e/render/array.cy.js +++ b/cypress/e2e/charts/array.cy.js @@ -1,17 +1,9 @@ import { stringArrayCypherQuery, intArrayCypherQuery, pathArrayCypherQuery } from '../../fixtures/cypher_queries'; -import { - enableReportActions, - createReportOfType, - closeSettings, - toggleTableTranspose, - openReportActionsMenu, - selectReportOfType, - openAdvancedSettings, - updateDropdownAdvancedSetting, -} from '../utils'; +import { Page } from '../../Page'; -const WAITING_TIME = 20000; const CARD_SELECTOR = 'main .react-grid-item:eq(2)'; +const page = new Page(CARD_SELECTOR); + // Ignore warnings that may appear when using the Cypress dev server Cypress.on('uncaught:exception', (err, runnable) => { console.log(err, runnable); @@ -20,62 +12,34 @@ Cypress.on('uncaught:exception', (err, runnable) => { describe('Testing array rendering', () => { beforeEach('open neodash', () => { - cy.viewport(1920, 1080); - cy.visit('/', { - onBeforeLoad(win) { - win.localStorage.clear(); - }, - }); - - cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME }) - .should('contain', 'NeoDash - Neo4j Dashboard Builder') - .click(); - - cy.get('#form-dialog-title').then(($div) => { - const text = $div.text(); - if (text == 'NeoDash - Neo4j Dashboard Builder') { - cy.wait(500); - // Create new dashboard - cy.contains('New Dashboard').click(); - } - }); - - cy.get('#form-dialog-title', { WAITING_TIME: WAITING_TIME }).should('contain', 'Connect to Neo4j'); - - cy.get('#url').clear().type('localhost'); - cy.get('#dbusername').clear().type('neo4j'); - cy.get('#dbpassword').type('test1234'); - cy.get('button').contains('Connect').click(); + page.init().createNewDashboard().connectToNeo4j(); cy.wait(100); }); it('creates a table that contains string arrays', () => { cy.checkInitialState(); - enableReportActions(); - createReportOfType('Table', stringArrayCypherQuery, true, true); + page.enableReportActions(); + page.createReportOfType('Table', stringArrayCypherQuery, true, true); // Standard array, displays strings joined with comma and whitespace cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'initial, list'); cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list'); // Now, transpose the table - toggleTableTranspose(CARD_SELECTOR, true); - cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should( - 'have.text', - 'initial,list' - ); + page.updateDropdownAdvancedSetting('Transpose Rows & Columns', 'on'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`).should('have.text', 'initial,list'); cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', 'other, list'); // Transpose back // And add a report action - toggleTableTranspose(CARD_SELECTOR, false); - openReportActionsMenu(CARD_SELECTOR); + page.updateDropdownAdvancedSetting('Transpose Rows & Columns', 'off'); + page.openReportActionsMenu(); cy.get('.ndl-modal').find('button[aria-label="add"]').click(); cy.get('.ndl-modal').find('input:eq(2)').type('column'); cy.get('.ndl-modal').find('input:eq(5)').type('test_param'); cy.get('.ndl-modal').find('input:eq(6)').type('column'); cy.get('.ndl-modal').find('button').contains('Save').click(); - closeSettings(CARD_SELECTOR); + page.closeSettings(); cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`) .find('button') .should('be.visible') @@ -90,24 +54,21 @@ describe('Testing array rendering', () => { it('creates a table that contains int arrays', () => { cy.checkInitialState(); - createReportOfType('Table', intArrayCypherQuery, true, true); + page.createReportOfType('Table', intArrayCypherQuery, true, true); // Standard array, displays strings joined with comma and whitespace cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', '1, 2'); cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4'); // Now, transpose the table - toggleTableTranspose(CARD_SELECTOR, true); - cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`, { timeout: WAITING_TIME }).should( - 'have.text', - '1,2' - ); + page.updateDropdownAdvancedSetting('Transpose Rows & Columns', 'on'); + cy.get(`${CARD_SELECTOR} .MuiDataGrid-columnHeaderTitle:eq(1)`).should('have.text', '1,2'); cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(1)`).should('have.text', '3, 4'); }); it('creates a table that contains nodes and rels', () => { cy.checkInitialState(); - createReportOfType('Table', pathArrayCypherQuery, true, true); + page.createReportOfType('Table', pathArrayCypherQuery, true, true); // Standard array, displays a path with two nodes and a relationship cy.get(`${CARD_SELECTOR} .MuiDataGrid-cell:eq(0)`).should('have.text', 'PersonACTED_INMovie'); @@ -120,13 +81,13 @@ describe('Testing array rendering', () => { it('creates a single value report which is an array', () => { cy.checkInitialState(); - createReportOfType('Single Value', stringArrayCypherQuery, true, true); + page.createReportOfType('Single Value', stringArrayCypherQuery, true, true); cy.get(CARD_SELECTOR).should('have.text', 'initial, list'); }); it('creates a multi parameter select', () => { cy.checkInitialState(); - selectReportOfType('Parameter Select'); + page.selectReportOfType('Parameter Select'); cy.get('main .react-grid-item:eq(2) label[for="Selection Type"]').siblings('div').click(); // Set up the parameter select cy.contains('Node Property').click(); @@ -140,8 +101,8 @@ describe('Testing array rendering', () => { cy.wait(1000); cy.get('.MuiAutocomplete-popper').contains('title').click(); // Enable multiple selection - closeSettings(CARD_SELECTOR); - updateDropdownAdvancedSetting(CARD_SELECTOR, 'Multiple Selection', 'on'); + page.closeSettings(); + page.updateDropdownAdvancedSetting('Multiple Selection', 'on'); // Finally, select a few values in the parameter select cy.get(CARD_SELECTOR).contains('Movie title').click(); cy.get(CARD_SELECTOR).contains('Movie title').siblings('div').find('input').type('a'); diff --git a/cypress/e2e/charts/bar.cy.js b/cypress/e2e/charts/bar.cy.js new file mode 100644 index 000000000..80f13d640 --- /dev/null +++ b/cypress/e2e/charts/bar.cy.js @@ -0,0 +1,211 @@ +import { barChartCypherQuery } from '../../fixtures/cypher_queries'; +import { Page } from '../../Page'; + +const CARD_SELECTOR = '.react-grid-layout:eq(0) .MuiGrid-root:eq(2)'; +const page = new Page(CARD_SELECTOR); + +// Ignore warnings that may appear when using the Cypress dev server +Cypress.on('uncaught:exception', (err, runnable) => { + console.log(err, runnable); + return false; +}); + +describe('Testing bar chart', () => { + beforeEach('open neodash', () => { + page.init().createNewDashboard().connectToNeo4j().createReportOfType('Bar Chart', barChartCypherQuery); + }); + + it('Checking Colour Picker settings', () => { + //Opens advanced settings + cy.get('.react-grid-layout') + .first() + .within(() => { + //Finds the 2nd card + cy.get('.MuiGrid-root:eq(2)').within(() => { + // Access advanced settings + cy.get('button').eq(1).click(); + cy.get('[role="switch"]').click(); + cy.wait(200); + // Changing setting for colour picker + cy.get('[data-testid="colorpicker-input"]').find('input').click().type('{selectall}').type('red'); + cy.get('button[aria-label="run"]').click(); + // Checking that colour picker was applied correctly + cy.get('.card-view').should('have.css', 'background-color', 'rgb(255, 0, 0)'); + cy.wait(200); + // Changing colour back to white + cy.get('button').eq(1).click(); + cy.get('[data-testid="colorpicker-input"]').find('input').click().type('{selectall}').type('white'); + cy.get('button[aria-label="run"]').click(); + // Checking colour has been set back to white + cy.wait(200); + cy.get('.card-view').should('have.css', 'background-color', 'rgb(255, 255, 255)'); + }); + }); + }); + + it('Checking Selector Description', () => { + //Opens first 2nd card + cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(2)').within(() => { + // Access advanced settings + cy.get('button').eq(1).click(); + cy.get('[role="switch"]').click(); + cy.wait(200); + // Changing Selector Description to 'Test' + cy.get('.ndl-textarea').contains('span', 'Selector Description').click().type('Test'); + cy.get('button[aria-label="run"]').click(); + // Pressing Selector Description button + cy.get('button[aria-label="details"]').click(); + }); + // Checking that Selector Description is behaving as expected + cy.get('.MuiDialog-paper').should('be.visible').and('contain.text', 'Test'); + cy.wait(1000); + + // Click elsewhere on the page to close dialog box + cy.get('div[role="dialog"]').parent().click(-100, -100, { force: true }); + }); + + it('Checking full screen bar chart setting', () => { + page.updateDropdownAdvancedSetting('Fullscreen enabled', 'on'); + cy.get('button[aria-label="maximize"]').click(); + // Checking existence of full-screen modal + cy.get('.dialog-xxl').should('be.visible'); + // Action to close full-screen modal + cy.get('button[aria-label="un-maximize"]').click(); + // Checking that fullscreen has un-maximized + // Check that the div is no longer in the DOM + cy.get('div[data-focus-lock-disabled="false"]').should('not.exist'); + }); + + it('Checking "Autorun Query" works as intended', () => { + page.updateDropdownAdvancedSetting('Auto-run query', 'off'); + cy.get('.MuiCardContent-root').find('.ndl-cypher-editor').should('be.visible'); + cy.get('.MuiCardContent-root').find('g').should('not.exist'); + cy.wait(100); + cy.get('.MuiCardContent-root').find('button[aria-label="run"]').filter(':visible').click(); + cy.get('g').should('exist'); + }); + + it('Checking Legend integration works as intended', () => { + page.updateDropdownAdvancedSetting('Show Legend', 'on'); + // Checking that legend matches value specified: in the case - 'count' + cy.get('svg g g text').last().contains(/count/i); + + page.updateDropdownAdvancedSetting('Show Legend', 'off'); + cy.get('svg g g text').last().contains(/count/i).should('not.exist'); + }); + + it('Checking the stacked grouping function works as intended', () => { + const TRANSLATE_REGEXP = /translate\(([0-9]{1,3}), [0-9]{1,3}\)/; + + page + .updateChartQuery( + 'MATCH (p:Person)-[:DIRECTED]->(n:Movie) RETURN n.released AS released, p.name AS Director, count(n.title) AS count LIMIT 5' + ) + .updateDropdownAdvancedSetting('Grouping', 'on'); + + cy.get('.MuiGrid-root:eq(2)') + .find('.ndl-dropdown:contains("Group")') + .find('svg') + .parent() + .click() + .type('Director{enter}'); + // Checking that the groups are stacked + cy.get('.MuiGrid-root:eq(2)') + .find('g') + .children('g') + .eq(3) // Get the fourth g element (index starts from 0) + .invoke('attr', 'transform') + .then((transformValue) => { + // Captures the first number in the translate attribute using the parenthesis to capture the first digit and put it in the second value of the resulting array + // if transformValue is translate(100,200), then it will produce an array like ["translate(100,200)", "100"], + const match = transformValue.match(TRANSLATE_REGEXP); + if (match?.[1]) { + const xValue = match[1]; + // Now find sibling g elements with the same x transform value + cy.get('.MuiCardContent-root') + .find('g') + .children('g') + .filter((_, element) => { + const siblingTransform = Cypress.$(element).attr('transform'); + return siblingTransform?.includes(`translate(${xValue},`); + }) + .should('have.length', 3); // Check that there's at least one element + } else { + throw new Error('Transform attribute not found or invalid format'); + } + }); + cy.get('.ndl-dropdown:contains("Group")').find('svg').parent().click().type('(none){enter}'); + //Checking that the stacked grouped elements do not exist + cy.get('.MuiCardContent-root') + .find('g') + .children('g') + .eq(3) // Get the fourth g element (index starts from 0) + .invoke('attr', 'transform') + .then((transformValue) => { + // Captures the first number in the translate attribute using the parenthesis to capture the first digit and put it in the second value of the resulting array + // if transformValue is translate(100,200), then it will produce an array like ["translate(100,200)", "100"], + const match = transformValue.match(TRANSLATE_REGEXP); + if (match?.[1]) { + const xValue = match[1]; + // Now find sibling g elements with the same x transform value + cy.get('.MuiCardContent-root') + .find('g') + .children('g') + .filter((_, element) => { + const siblingTransform = Cypress.$(element).attr('transform'); + return siblingTransform?.includes(`translate(${xValue},`); + }) + .should('have.length', 1); // Check that there are no matching elements + } else { + throw new Error('Transform attribute not found or invalid format'); + } + }); + }); + + // How to properly test this? + it.skip('Testing grouped grouping mode', () => { + page + .updateChartQuery( + 'MATCH (p:Person)-[:DIRECTED]->(n:Movie) RETURN n.released AS released, p.name AS Director, count(n.title) AS count LIMIT 5' + ) + .updateDropdownAdvancedSetting('Grouping', 'on') + .updateDropdownAdvancedSetting('Group Mode', 'grouped'); + cy.get('.ndl-dropdown:contains("Group")').find('svg').parent().click().type('Director{enter}'); + }); + + it('Testing "Show Value on Bars"', () => { + page.updateDropdownAdvancedSetting('Show Values On Bars', 'on'); + cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(2)').find('div svg > g > g > text').should('have.length', 5); + + page.updateDropdownAdvancedSetting('Show Values On Bars', 'off'); + cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(2)').find('div svg > g > g > text').should('not.exist'); + }); + + describe('Y axis display', () => { + it('Checking Y axis is displayed', () => { + page.updateDropdownAdvancedSetting('Display Y axis', 'on'); + cy.get('.MuiCardContent-root svg > g > g:nth-child(3)') + .invoke('attr', 'transform') + .should('eq', 'translate(0,0)'); + }); + + it('Checking Y axis is hidden', () => { + page.updateDropdownAdvancedSetting('Display Y axis', 'off'); + cy.get('.MuiCardContent-root svg > g > g:nth-child(3)') + .invoke('attr', 'transform') + .should('not.eq', 'translate(0,0)'); + }); + }); + + describe('Y grid lines display', () => { + it('Checking Y grid lines are displayed', () => { + page.updateDropdownAdvancedSetting('Display Y grid lines', 'on'); + cy.get('.MuiCardContent-root svg g > g > line').invoke('attr', 'stroke').should('eq', '#dddddd'); + }); + + it('Checking Y grid lines are hidden', () => { + page.updateDropdownAdvancedSetting('Display Y grid lines', 'off'); + cy.get('.MuiCardContent-root svg g > g > line').invoke('attr', 'stroke').should('not.eq', '#dddddd'); + }); + }); +}); diff --git a/cypress/e2e/table.cy.js b/cypress/e2e/charts/table.cy.js similarity index 66% rename from cypress/e2e/table.cy.js rename to cypress/e2e/charts/table.cy.js index 8ae2ac3c8..5c086df1b 100644 --- a/cypress/e2e/table.cy.js +++ b/cypress/e2e/charts/table.cy.js @@ -1,6 +1,7 @@ -import { tableCypherQuery } from '../fixtures/cypher_queries'; +import { tableCypherQuery } from '../../fixtures/cypher_queries'; +import { Page } from '../../Page'; -const WAITING_TIME = 20000; +const page = new Page(); // Ignore warnings that may appear when using the Cypress dev server Cypress.on('uncaught:exception', (err, runnable) => { console.log(err, runnable); @@ -9,30 +10,7 @@ Cypress.on('uncaught:exception', (err, runnable) => { describe('Testing table', () => { beforeEach('open neodash', () => { - cy.viewport(1920, 1080); - cy.visit('/', { - onBeforeLoad(win) { - win.localStorage.clear(); - }, - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'NeoDash - Neo4j Dashboard Builder').click(); - - cy.get('#form-dialog-title').then(($div) => { - const text = $div.text(); - if (text == 'NeoDash - Neo4j Dashboard Builder') { - cy.wait(500); - // Create new dashboard - cy.contains('New Dashboard').click(); - } - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); - - cy.get('#url').clear().type('localhost'); - cy.get('#dbusername').clear().type('neo4j'); - cy.get('#dbpassword').type('test1234'); - cy.get('button').contains('Connect').click(); + page.init().createNewDashboard().connectToNeo4j(); cy.wait(100); }); diff --git a/cypress/e2e/start_page.cy.js b/cypress/e2e/start_page.cy.js index c6e9f7c4b..ec49fef99 100644 --- a/cypress/e2e/start_page.cy.js +++ b/cypress/e2e/start_page.cy.js @@ -10,9 +10,12 @@ import { gaugeChartCypherQuery, formCypherQuery, } from '../fixtures/cypher_queries'; -import { createReportOfType, selectReportOfType, enableAdvancedVisualizations, enableFormsExtension } from './utils'; -const WAITING_TIME = 20000; +import { Page } from '../Page'; + +const CARD_SELECTOR = 'main .react-grid-item:eq(2)'; +const page = new Page(CARD_SELECTOR); + // Ignore warnings that may appear when using the Cypress dev server Cypress.on('uncaught:exception', (err, runnable) => { console.log(err, runnable); @@ -21,40 +24,7 @@ Cypress.on('uncaught:exception', (err, runnable) => { describe('NeoDash E2E Tests', () => { beforeEach(() => { - cy.viewport(1920, 1080); - // Navigate to index - cy.visit('/', { - onBeforeLoad(win) { - win.localStorage.clear(); - }, - }); - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'NeoDash - Neo4j Dashboard Builder').click(); - - cy.get('#form-dialog-title').then(($div) => { - const text = $div.text(); - if (text == 'NeoDash - Neo4j Dashboard Builder') { - cy.wait(500); - // Create new dashboard - cy.contains('New Dashboard').click(); - } - }); - - // If an old dashboard exists in cache, do a check to make sure we clear it. - // if (cy.contains("Create new dashboard")) { - // cy.contains('Yes').click() - // } - - cy.get('#form-dialog-title', { timeout: 20000 }).should('contain', 'Connect to Neo4j'); - - // Connect to Neo4j database - // cy.get('#protocol').click() - // cy.contains('neo4j').click() - cy.get('#url').clear().type('localhost'); - // cy.get('#database').type('neo4j') - cy.get('#dbusername').clear().type('neo4j'); - cy.get('#dbpassword').type('test1234'); - cy.get('button').contains('Connect').click(); + page.init().createNewDashboard().connectToNeo4j(); cy.wait(100); }); @@ -85,7 +55,7 @@ describe('NeoDash E2E Tests', () => { cy.get('main .react-grid-item:eq(2)').contains('Advanced settings').click(); cy.get('main .react-grid-item:eq(2) button[aria-label="run"]').click(); - cy.get('main .react-grid-item:eq(2) .MuiDataGrid-columnHeaders', { timeout: WAITING_TIME }) + cy.get('main .react-grid-item:eq(2) .MuiDataGrid-columnHeaders') .should('contain', 'title') .and('contain', 'released') .and('not.contain', '__id'); @@ -98,34 +68,25 @@ describe('NeoDash E2E Tests', () => { it('creates a bar chart report', () => { cy.checkInitialState(); - createReportOfType('Bar Chart', barChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #index input[name="Category"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'released' - ); + page.createReportOfType('Bar Chart', barChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #index input[name="Category"]').should('have.value', 'released'); cy.get('main .react-grid-item:eq(2) #value input[name="Value"]').should('have.value', 'count'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g').should('have.length', 8); }); it('creates a pie chart report', () => { cy.checkInitialState(); - createReportOfType('Pie Chart', barChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #index input[name="Category"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'released' - ); + page.createReportOfType('Pie Chart', barChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #index input[name="Category"]').should('have.value', 'released'); cy.get('main .react-grid-item:eq(2) #value input[name="Value"]').should('have.value', 'count'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g').should('have.length', 3); - cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g:nth-child(2) > path').should('have.length', 5); + cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g > path').should('have.length', 5); }); it('creates a line chart report', () => { cy.checkInitialState(); - createReportOfType('Line Chart', barChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #x input[name="X-value"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'released' - ); + page.createReportOfType('Line Chart', barChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #x input[name="X-value"]').should('have.value', 'released'); cy.get('main .react-grid-item:eq(2) #value input[name="Y-value"]').should('have.value', 'count'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g').should('have.length', 6); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g:nth-child(2) > line').should( @@ -136,19 +97,14 @@ describe('NeoDash E2E Tests', () => { it('creates a map chart report', () => { cy.checkInitialState(); - createReportOfType('Map', mapChartCypherQuery, true); - cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > path', { timeout: WAITING_TIME }).should( - 'have.length', - 5 - ); + page.createReportOfType('Map', mapChartCypherQuery, true); + cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > path').should('have.length', 5); }); it('creates a single value report', () => { cy.checkInitialState(); - createReportOfType('Single Value', barChartCypherQuery); - cy.get('main .react-grid-item:eq(2) .MuiCardContent-root > div > div:nth-child(2) > span', { - timeout: WAITING_TIME, - }) + page.createReportOfType('Single Value', barChartCypherQuery); + cy.get('main .react-grid-item:eq(2) .MuiCardContent-root > div > div:nth-child(2) > span') .invoke('text') .then((text) => { expect(text).to.be.oneOf(['1999', '1,999', '1 999']); @@ -156,62 +112,49 @@ describe('NeoDash E2E Tests', () => { }); it.skip('creates a gauge chart report', () => { - enableAdvancedVisualizations(); + page.enableAdvancedVisualizations(); cy.checkInitialState(); - createReportOfType('Gauge Chart', gaugeChartCypherQuery); - cy.get('.text-group > text', { timeout: WAITING_TIME }).contains('69'); + page.createReportOfType('Gauge Chart', gaugeChartCypherQuery); + cy.get('.text-group > text').contains('69'); }); it('creates a sunburst chart report', () => { - enableAdvancedVisualizations(); + page.enableAdvancedVisualizations(); cy.checkInitialState(); - createReportOfType('Sunburst Chart', sunburstChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #index input[name="Path"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'x.path' - ); + page.createReportOfType('Sunburst Chart', sunburstChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #index input[name="Path"]').should('have.value', 'x.path'); cy.get('main .react-grid-item:eq(2) #value input[name="Value"]').should('have.value', 'x.value'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g:nth-child(1) > path').should('have.length', 5); }); it('creates a circle packing report', () => { - enableAdvancedVisualizations(); + page.enableAdvancedVisualizations(); cy.checkInitialState(); - createReportOfType('Circle Packing', sunburstChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #index input[name="Path"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'x.path' - ); + page.createReportOfType('Circle Packing', sunburstChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #index input[name="Path"]').should('have.value', 'x.path'); cy.get('main .react-grid-item:eq(2) #value input[name="Value"]').should('have.value', 'x.value'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > circle').should('have.length', 6); }); it('creates a tree map report', () => { - enableAdvancedVisualizations(); + page.enableAdvancedVisualizations(); cy.checkInitialState(); - createReportOfType('Treemap', sunburstChartCypherQuery); - cy.get('main .react-grid-item:eq(2) #index input[name="Path"]', { timeout: WAITING_TIME }).should( - 'have.value', - 'x.path' - ); + page.createReportOfType('Treemap', sunburstChartCypherQuery); + cy.get('main .react-grid-item:eq(2) #index input[name="Path"]').should('have.value', 'x.path'); cy.get('main .react-grid-item:eq(2) #value input[name="Value"]').should('have.value', 'x.value'); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > g').should('have.length', 6); }); it('creates a sankey chart report', () => { - enableAdvancedVisualizations(); + page.enableAdvancedVisualizations(); cy.checkInitialState(); - createReportOfType('Sankey Chart', sankeyChartCypherQuery, true); - cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > path', { timeout: WAITING_TIME }).should( - 'have.attr', - 'fill-opacity', - 0.5 - ); + page.createReportOfType('Sankey Chart', sankeyChartCypherQuery, true); + cy.get('main .react-grid-item:eq(2) .MuiCardContent-root svg > g > path').should('have.attr', 'fill-opacity', 0.5); }); it('creates a raw json report', () => { cy.checkInitialState(); - createReportOfType('Raw JSON', barChartCypherQuery); + page.createReportOfType('Raw JSON', barChartCypherQuery); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root textarea:nth-child(1)', { timeout: 45000 }).should( ($div) => { const text = $div.text(); @@ -222,7 +165,7 @@ describe('NeoDash E2E Tests', () => { it('creates a parameter select report', () => { cy.checkInitialState(); - selectReportOfType('Parameter Select'); + page.selectReportOfType('Parameter Select'); cy.wait(500); cy.get('#autocomplete-label-type').type('Movie'); cy.get('#autocomplete-label-type-option-0').click(); @@ -236,20 +179,20 @@ describe('NeoDash E2E Tests', () => { it('creates an iframe report', () => { cy.checkInitialState(); - createReportOfType('iFrame', iFrameText); + page.createReportOfType('iFrame', iFrameText); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root iframe', { timeout: 45000 }).should('be.visible'); }); it('creates a markdown report', () => { cy.checkInitialState(); - createReportOfType('Markdown', markdownText); + page.createReportOfType('Markdown', markdownText); cy.get('main .react-grid-item:eq(2) .MuiCardContent-root h1', { timeout: 45000 }).should('have.text', 'Hello'); }); it.skip('creates a form report', () => { - enableFormsExtension(); + page.enableFormsExtension(); cy.checkInitialState(); - createReportOfType('Form', formCypherQuery, true, false); + page.createReportOfType('Form', formCypherQuery, true, false); cy.get('main .react-grid-item:eq(2) .form-add-parameter').click(); cy.wait(200); cy.get('#autocomplete-label-type').type('Movie'); @@ -273,7 +216,7 @@ describe('NeoDash E2E Tests', () => { // TODO - this test is flaky, especially in GitHub actions environment. it.skip('test load dashboard from file and stress test report customizations', () => { try { - var NUMBER_OF_PAGES_IN_STRESS_TEST_DASHBOARD = 5; + const NUMBER_OF_PAGES_IN_STRESS_TEST_DASHBOARD = 5; const file = cy.request(loadDashboardURL).should((response) => { cy.get('#root .MuiDrawer-root .MuiIconButton-root:eq(2)').click(); cy.get('.MuiDialog-root .MuiPaper-root .MuiDialogContent-root textarea:eq(0)') diff --git a/cypress/e2e/utils.js b/cypress/e2e/utils.js deleted file mode 100644 index ae5639cf9..000000000 --- a/cypress/e2e/utils.js +++ /dev/null @@ -1,84 +0,0 @@ -export function enableReportActions() { - cy.get('main button[aria-label="Extensions').should('be.visible').click(); - cy.get('#checkbox-actions').scrollIntoView(); - cy.get('#checkbox-actions').should('be.visible').click(); - cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); - cy.wait(200); -} - -export function enableAdvancedVisualizations() { - cy.get('main button[aria-label="Extensions').should('be.visible').click(); - cy.get('#checkbox-advanced-charts').should('be.visible').click(); - cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); - cy.wait(200); -} - -export function enableFormsExtension() { - cy.get('main button[aria-label="Extensions').should('be.visible').click(); - cy.get('#checkbox-forms').scrollIntoView(); - cy.get('#checkbox-forms').should('be.visible').click(); - cy.get('.ndl-dialog-close').scrollIntoView().should('be.visible').click(); - cy.wait(200); -} - -export function selectReportOfType(type) { - cy.get('main .react-grid-item button[aria-label="add report"]').should('be.visible').click(); - cy.get('main .react-grid-item') - .contains('No query specified.') - .parentsUntil('.react-grid-item') - .find('button[aria-label="settings"]', { timeout: 2000 }) - .should('be.visible') - .click(); - cy.get('main .react-grid-item:eq(2) #type', { timeout: 2000 }).should('be.visible').click(); - cy.contains(type).click(); - cy.wait(100); -} - -export function createReportOfType(type, query, fast = false, run = true) { - selectReportOfType(type); - if (fast) { - cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { delay: 1, parseSpecialCharSequences: false }); - } else { - cy.get('main .react-grid-item:eq(2) .ReactCodeMirror').type(query, { parseSpecialCharSequences: false }); - } - cy.wait(400); - - if (run) { - closeSettings('main .react-grid-item:eq(2)'); - } -} - -export function openSettings(cardSelector) { - cy.get(cardSelector).find('button[aria-label="settings"]', { WAITING_TIME: 2000 }).click(); -} - -export function closeSettings(cardSelector) { - cy.get(`${cardSelector} button[aria-label="run"]`).click(); -} - -export function openAdvancedSettings(cardSelector) { - openSettings(cardSelector); - cy.get(cardSelector).contains('Advanced settings').click(); -} - -export function closeAdvancedSettings(cardSelector) { - cy.get(cardSelector).contains('Advanced settings').click(); - closeSettings(cardSelector); -} - -export function openReportActionsMenu(cardSelector) { - openSettings(cardSelector); - cy.get(cardSelector).find('button[aria-label="custom actions"]').click(); -} - -export function updateDropdownAdvancedSetting(cardSelector, settingLabel, targetValue) { - openAdvancedSettings(cardSelector); - cy.get(`${cardSelector} .ndl-dropdown`).contains(settingLabel).siblings('div').click(); - cy.contains(targetValue).click(); - closeAdvancedSettings(cardSelector); -} - -export function toggleTableTranspose(cardSelector, enable) { - let transpose = enable ? 'on' : 'off'; - updateDropdownAdvancedSetting(cardSelector, 'Transpose Rows & Columns', transpose); -} diff --git a/cypress/support/index.js b/cypress/index.js similarity index 95% rename from cypress/support/index.js rename to cypress/index.js index 37a498fb5..cbfe0a766 100644 --- a/cypress/support/index.js +++ b/cypress/index.js @@ -14,7 +14,7 @@ // *********************************************************** // Import commands.js using ES2015 syntax: -import './commands'; +import './support/commands'; // Alternatively you can use CommonJS syntax: // require('./commands') diff --git a/cypress/support/commands.js b/cypress/support/commands.js index e486473bc..c7e9831e0 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -24,61 +24,29 @@ // -- This will overwrite an existing command -- // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) Cypress.Commands.add('getDataTest', (dataTestSelector) => { - return cy.get(`[data-test="${dataTestSelector}"]`); - }); - - /** - * Function to interact with a specific element and execute additional custom commands. - * @param {Function} customAction - A callback function containing custom Cypress commands. - */ - - // Used to open the 2nd report card and activate 'advanced settings' - Cypress.Commands.add('advancedSettings', (customAction) => { - cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { - // Opening settings - cy.get('button').eq(1).click(); - // Activating advanced settings - cy.get('[role="switch"]').click(); - cy.wait(200); - customAction(); - }); - }); - - // Used to open 2nd the report card - Cypress.Commands.add('openSettings', (customAction) => { - cy.get('.react-grid-layout:eq(0) .MuiGrid-root:eq(1)').within(() => { - // Opening settings - cy.get('button').eq(1).click(); - cy.wait(200); - customAction(); - }); - }); - - // Needs to be used when already inside scole of a report card - Cypress.Commands.add('setDropdownValue', (labelName, setting) => { - cy.get('.ndl-dropdown') - .contains('label', labelName) - .scrollIntoView() - .should('be.visible') - .click() - .type(`${setting}{enter}`); - }); - - //Used in start_page.cy.js - Cypress.Commands.add('checkInitialState', () => { - // Check the starter cards - cy.get('main .react-grid-item:eq(0)').should('contain', 'This is your first dashboard!'); - cy.get('main .react-grid-item:eq(1) .force-graph-container canvas').should('be.visible'); - cy.get('main .react-grid-item:eq(2) button').should('have.attr', 'aria-label', 'add report'); - }); - - // Creates a card - const WAITING_TIME = 20000; - Cypress.Commands.add('createCard', () => { - // Check the starter cards - cy.get('main .react-grid-item button[aria-label="add report"]', { timeout: WAITING_TIME }) - .should('be.visible') - .click(); - cy.wait(1000); - cy.get('main .react-grid-item:eq(2)').should('contain', 'No query specified.'); - }); \ No newline at end of file + return cy.get(`[data-test="${dataTestSelector}"]`); +}); + +/** + * Function to interact with a specific element and execute additional custom commands. + * @param {Function} customAction - A callback function containing custom Cypress commands. + */ + +//Used in start_page.cy.js +Cypress.Commands.add('checkInitialState', () => { + // Check the starter cards + cy.get('main .react-grid-item:eq(0)').should('contain', 'This is your first dashboard!'); + cy.get('main .react-grid-item:eq(1) .force-graph-container canvas').should('be.visible'); + cy.get('main .react-grid-item:eq(2) button').should('have.attr', 'aria-label', 'add report'); +}); + +// Creates a card +const WAITING_TIME = 20000; +Cypress.Commands.add('createCard', () => { + // Check the starter cards + cy.get('main .react-grid-item button[aria-label="add report"]', { timeout: WAITING_TIME }) + .should('be.visible') + .click(); + cy.wait(1000); + cy.get('main .react-grid-item:eq(2)').should('contain', 'No query specified.'); +}); diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index b82124d2f..e2be400e2 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -14,7 +14,7 @@ docker run -p 5005:5005 \ -e DASHBOARD_HEADER_BRAND_LOGO=https://picsum.photos/500/100 \ neo4jlabs/neodash .... - + An example configuration for NeoDash .... diff --git a/package.json b/package.json index c3886272b..e7f5a6dad 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "lint": "eslint --ext .ts --ext .tsx .", "lint-staged": "lint-staged --config .lintstagedrc.json", "test": "yarn cypress open", - "test-headless": "yarn cypress run" + "test-headless": "yarn cypress run", + "prepare": "husky install" }, "keywords": [], "author": "Neo4j Labs", diff --git a/src/chart/bar/BarChart.tsx b/src/chart/bar/BarChart.tsx index 132d13ecb..cd3a5582f 100644 --- a/src/chart/bar/BarChart.tsx +++ b/src/chart/bar/BarChart.tsx @@ -28,6 +28,9 @@ const NeoBarChart = (props: ChartProps) => { const padding = settings.padding ? settings.padding : 0.25; const innerPadding = settings.innerPadding ? settings.innerPadding : 0; const expandHeightForLegend = settings.expandHeightForLegend ? settings.expandHeightForLegend : false; + const displayYAxis = settings.displayYAxis ?? true; + const displayYGridLines = settings.displayYGridLines ?? true; + const actionsRules = extensionEnabled(props.extensions, 'actions') && props.settings && props.settings.actionsRules ? props.settings.actionsRules @@ -408,11 +411,16 @@ const NeoBarChart = (props: ChartProps) => { tickPadding: 5, tickRotation: labelRotation, }} - axisLeft={{ - tickSize: 5, - tickPadding: 5, - tickRotation: 0, - }} + axisLeft={ + displayYAxis + ? { + tickSize: 5, + tickPadding: 5, + tickRotation: 0, + } + : null + } + enableGridY={displayYGridLines} labelSkipWidth={labelSkipWidth} labelSkipHeight={labelSkipHeight} labelTextColor={{ from: 'color', modifiers: [['darker', 1.6]] }} diff --git a/src/config/ReportConfig.tsx b/src/config/ReportConfig.tsx index a8e716d52..be72ffb9d 100644 --- a/src/config/ReportConfig.tsx +++ b/src/config/ReportConfig.tsx @@ -421,6 +421,18 @@ const _REPORT_TYPES = { type: SELECTION_TYPES.NUMBER, default: 0.25, }, + displayYAxis: { + label: 'Display Y axis', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: true, + }, + displayYGridLines: { + label: 'Display Y grid lines', + type: SELECTION_TYPES.LIST, + values: [true, false], + default: true, + }, }, }, pie: { From 2a7105fff449587aabbabb88bd0ac97dd7d24433 Mon Sep 17 00:00:00 2001 From: MariusC Date: Mon, 11 Nov 2024 09:40:31 +0100 Subject: [PATCH 113/120] Markdown tables not rendered #836 (#893) Co-authored-by: Marius Conjeaud --- package.json | 1 + src/chart/markdown/MarkdownChart.tsx | 38 +++++++++++++++++++++++++--- src/index.pcss | 18 +++++++++++++ yarn.lock | 5 ++++ 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e7f5a6dad..f4004a5f3 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "tailwindcss": "^3.3.2", "three": "^0.159.0", "three-spritetext": "^1.8.1", + "urijs": "^1.19.11", "use-neo4j": "^0.3.13", "yaml": "^2.2.1" }, diff --git a/src/chart/markdown/MarkdownChart.tsx b/src/chart/markdown/MarkdownChart.tsx index d373b0da5..a6958edcc 100644 --- a/src/chart/markdown/MarkdownChart.tsx +++ b/src/chart/markdown/MarkdownChart.tsx @@ -1,13 +1,40 @@ import React from 'react'; import { ChartProps } from '../Chart'; import ReactMarkdown from 'react-markdown'; -import gfm from 'remark-gfm'; +import remarkGfm from 'remark-gfm'; +import URI from 'urijs'; import { replaceDashboardParameters } from '../ChartUtils'; +// Sanitizes URIs +const transformUri = (uri: string): string | undefined => { + const parsedUri = URI(uri); + if (parsedUri.protocol() === 'http' || parsedUri.protocol() === 'https') { + return parsedUri.toString(); // Convert URI object back to string + } + return undefined; // Return undefined to skip rendering of potentially unsafe URLs +}; + +// Define custom components for Markdown elements +const CustomTable = ({ _, ...props }) =>
    + {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}
    + {flexRender(cell.column.columnDef.cell, cell.getContext())}
    ; +const CustomTh = ({ _, ...props }) =>
    ; +const CustomTd = ({ _, ...props }) => ; +const CustomATag = ({ _, href, ...props }) => ( + // Apply URI transformation right in the anchor element for additional security + +); + /** * Renders Markdown text provided by the user. */ const NeoMarkdownChart = (props: ChartProps) => { + // Define custom components for Markdown elements + const components = { + table: CustomTable, + th: CustomTh, + td: CustomTd, + a: CustomATag, + }; + // Records are overridden to be a single element array with a field called 'input'. const { records } = props; const parameters = props.parameters ? props.parameters : {}; @@ -17,13 +44,18 @@ const NeoMarkdownChart = (props: ChartProps) => { : true; const markdown = records[0].input; const modifiedMarkdown = replaceGlobalParameters ? replaceDashboardParameters(markdown, parameters) : markdown; - // TODO: we should check if the gfm plugin has an impact on the standard security provided by ReactMarkdown return (
    - + +
    ); }; diff --git a/src/index.pcss b/src/index.pcss index f1bd03ad2..ff7621c32 100644 --- a/src/index.pcss +++ b/src/index.pcss @@ -90,4 +90,22 @@ .n-bg-dark-neutral-text-weak { background-color: rgb(196 200 205 / var(--tw-bg-opacity)) !important; } + + /* Markdown table styles */ + .markdown-table { + width: 100%; + border-collapse: collapse; + } + + .markdown-table th, + .markdown-table td { + border: 1px solid #ddd; /* Light gray border */ + padding: 8px; /* Padding around text */ + text-align: left; /* Align text to the left */ + } + + .markdown-table th { + background-color: #f4f4f4; /* Light gray background for header */ + color: #333; /* Dark text color for contrast */ + } } diff --git a/yarn.lock b/yarn.lock index 81bf347c7..915ef74b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13504,6 +13504,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urijs@^1.19.11: + version "1.19.11" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" + integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" From f8c48ff2240f92a3fe9806f99dd4bf6f7c1e1b71 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Mon, 11 Nov 2024 10:05:49 +0100 Subject: [PATCH 114/120] Added banner to all docs pages referring to new docs --- docs/modules/ROOT/pages/banner.adoc | 6 ++++++ .../ROOT/pages/developer-guide/adding-visualizations.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/build-and-run.adoc | 2 ++ .../ROOT/pages/developer-guide/component-overview.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/configuration.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/contributing.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/design.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/index.adoc | 2 ++ .../modules/ROOT/pages/developer-guide/session-storage.adoc | 2 ++ .../modules/ROOT/pages/developer-guide/standalone-mode.adoc | 2 ++ .../ROOT/pages/developer-guide/state-management.adoc | 2 ++ .../ROOT/pages/developer-guide/style-configuration.adoc | 2 ++ docs/modules/ROOT/pages/developer-guide/testing.adoc | 2 ++ docs/modules/ROOT/pages/index.adoc | 2 ++ docs/modules/ROOT/pages/quickstart.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/access-control.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/bloom-integration.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/dashboards.adoc | 2 ++ .../user-guide/extensions/access-control-management.adoc | 2 ++ .../user-guide/extensions/advanced-visualizations.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/extensions/forms.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/extensions/index.adoc | 2 ++ .../user-guide/extensions/natural-language-queries.adoc | 2 ++ .../ROOT/pages/user-guide/extensions/report-actions.adoc | 2 ++ .../pages/user-guide/extensions/rule-based-styling.adoc | 2 ++ .../modules/ROOT/pages/user-guide/extensions/workflows.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/faq.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/index.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/pages.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/publishing.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/areamap.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc | 2 ++ .../ROOT/pages/user-guide/reports/circle-packing.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/form.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/gantt.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/graph.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/iframe.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/index.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/map.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/markdown.adoc | 2 ++ .../ROOT/pages/user-guide/reports/parameter-select.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/radar.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/sankey.adoc | 2 ++ .../modules/ROOT/pages/user-guide/reports/single-value.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/table.adoc | 2 ++ docs/modules/ROOT/pages/user-guide/reports/treemap.adoc | 2 ++ 54 files changed, 112 insertions(+) create mode 100644 docs/modules/ROOT/pages/banner.adoc diff --git a/docs/modules/ROOT/pages/banner.adoc b/docs/modules/ROOT/pages/banner.adoc new file mode 100644 index 000000000..fdb12c826 --- /dev/null +++ b/docs/modules/ROOT/pages/banner.adoc @@ -0,0 +1,6 @@ +[NOTE] +==== +This documentation pertains to the unsupported version of NeoDash, as part of Neo4j Labs. +For users of the supported NeoDash offering, refer to https://neo4j.com/docs/neodash-commercial/[NeoDash commercial]. + +==== \ No newline at end of file diff --git a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc index dc47ee4ab..4d9fd76eb 100644 --- a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc +++ b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Adding Visualizations You can extend NeoDash with your own visualizations without diving deep diff --git a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc index 45cbc2641..9e9681489 100644 --- a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc +++ b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Build & Run To start developing the application, you will need to set up the diff --git a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc index e02da7989..27d78236d 100644 --- a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc +++ b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Component Overview diff --git a/docs/modules/ROOT/pages/developer-guide/configuration.adoc b/docs/modules/ROOT/pages/developer-guide/configuration.adoc index 604ed1298..61add0366 100644 --- a/docs/modules/ROOT/pages/developer-guide/configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/configuration.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Configuration When using a custom NeoDash deployment, there are several settings that diff --git a/docs/modules/ROOT/pages/developer-guide/contributing.adoc b/docs/modules/ROOT/pages/developer-guide/contributing.adoc index 1cb695dde..90c198ff9 100644 --- a/docs/modules/ROOT/pages/developer-guide/contributing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/contributing.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Contributing Contributions to the project are highly welcomed. Please consider diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index f65debfb7..5646b89ad 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Deploy a Build If you have a pre-built NeoDash application, you can easily deploy it on an any webserver. A NeoDash build is "just" a collection of HTML, CSS and JavaScript files, so it can run virtually anywhere. diff --git a/docs/modules/ROOT/pages/developer-guide/design.adoc b/docs/modules/ROOT/pages/developer-guide/design.adoc index 5f498bb2d..3c7bd32eb 100644 --- a/docs/modules/ROOT/pages/developer-guide/design.adoc +++ b/docs/modules/ROOT/pages/developer-guide/design.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Design This page contains some key guidelines for design of the application. diff --git a/docs/modules/ROOT/pages/developer-guide/index.adoc b/docs/modules/ROOT/pages/developer-guide/index.adoc index f4538d764..b9424ebb0 100644 --- a/docs/modules/ROOT/pages/developer-guide/index.adoc +++ b/docs/modules/ROOT/pages/developer-guide/index.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Developer Guide This guide contains information for developers looking to deploy NeoDash, or extend it for their own needs. diff --git a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc index a4861a4cf..7a668e4a7 100644 --- a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc +++ b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Session Storage This reducer serves only to store data that we want to reset at each new session. diff --git a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc index f752cbad1..58575256e 100644 --- a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc +++ b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Standalone Mode Next to being a dashboard editor, NeoDash can be deployed in a diff --git a/docs/modules/ROOT/pages/developer-guide/state-management.adoc b/docs/modules/ROOT/pages/developer-guide/state-management.adoc index bdece9b9e..1083bf2c1 100644 --- a/docs/modules/ROOT/pages/developer-guide/state-management.adoc +++ b/docs/modules/ROOT/pages/developer-guide/state-management.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = State Management NeoDash is an application with a complex internal state. If you are diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index b82124d2f..18721e485 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Style Configuration When using a custom NeoDash deployment, there are several theme variables that diff --git a/docs/modules/ROOT/pages/developer-guide/testing.adoc b/docs/modules/ROOT/pages/developer-guide/testing.adoc index 402ed1bca..5c492a375 100644 --- a/docs/modules/ROOT/pages/developer-guide/testing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/testing.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Testing NeoDash uses *Cypress* for automated testing. To install Cypress, check diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 6c7816dce..83eadebd0 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -1,3 +1,5 @@ +include::/banner.adoc[] + = Introduction This portal contains information on getting started with NeoDash - A Low-Code Dashboard Builder for Neo4j. diff --git a/docs/modules/ROOT/pages/quickstart.adoc b/docs/modules/ROOT/pages/quickstart.adoc index b128dac71..4ae165058 100644 --- a/docs/modules/ROOT/pages/quickstart.adoc +++ b/docs/modules/ROOT/pages/quickstart.adoc @@ -1,3 +1,5 @@ +include::/banner.adoc[] + = Quickstart There are three easy ways to run NeoDash and start dashboarding your Neo4j data: diff --git a/docs/modules/ROOT/pages/user-guide/access-control.adoc b/docs/modules/ROOT/pages/user-guide/access-control.adoc index 03c62dfd1..47cf3da31 100644 --- a/docs/modules/ROOT/pages/user-guide/access-control.adoc +++ b/docs/modules/ROOT/pages/user-guide/access-control.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Access Control The Access Control feature in NeoDash is a security measure that allows Users with write access or higher privileges to manage who has access to specific dashboards. diff --git a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc index 8acdc4e92..09dcce58c 100644 --- a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc +++ b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Bloom Integration NeoDash can be linked to Neo4j Bloom perspectives by using diff --git a/docs/modules/ROOT/pages/user-guide/dashboards.adoc b/docs/modules/ROOT/pages/user-guide/dashboards.adoc index dc6b70571..d0aa53b11 100644 --- a/docs/modules/ROOT/pages/user-guide/dashboards.adoc +++ b/docs/modules/ROOT/pages/user-guide/dashboards.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Dashboards In NeoDash, a dashboard consists of several pages, each of which can diff --git a/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc index 941b4dbda..9a6219c45 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Access Control Management This extension lets you manage access control for roles and users, letting you assign users to roles as well as controlling which node labels can be read by a user. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc index fb02c5a94..f4e7e8e98 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Advanced Visualizations Advanced visualizations let you extend your dashboard with complex, powerful visualizations beyond the standard visualizations. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc index 4bce11d4d..3ea8c965e 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Forms The 'forms' extension lets you combine different parameter selectors to update / modify your graph data. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc index f267315ff..6d16b1700 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Extensions Extensions provide a way to expand the basic functionality of NeoDash with extra features. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc index e7f9ea059..675a00a2d 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Text2Cypher - Natural Language Queries Use natural language to generate Cypher queries in NeoDash. Connect to an LLM through an API, and let NeoDash use your database schema + the report types to generate queries automatically. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc index 8b50f1651..a381c0076 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Report Actions link:../#_2_pro_extensions[label:Pro Extension[]] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc index ee6adc4ca..8a4b0ea9c 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Rule-Based Styling diff --git a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc index 2b95b06d5..a735dbc2c 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Workflows Introducing an advanced extension for creating, managing, and running workflows with Cypher queries. Simplify ETL flows, execute complex query chains, and run graph data science workloads effortlessly from Neodash. diff --git a/docs/modules/ROOT/pages/user-guide/faq.adoc b/docs/modules/ROOT/pages/user-guide/faq.adoc index cdd5efaad..08ece7dd1 100644 --- a/docs/modules/ROOT/pages/user-guide/faq.adoc +++ b/docs/modules/ROOT/pages/user-guide/faq.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = FAQ == 1. How can I learn more about NeoDash? diff --git a/docs/modules/ROOT/pages/user-guide/index.adoc b/docs/modules/ROOT/pages/user-guide/index.adoc index dde9d9e05..d87dffb6d 100644 --- a/docs/modules/ROOT/pages/user-guide/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/index.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = User Guide The following pages contain everything you need to get started with NeoDash. diff --git a/docs/modules/ROOT/pages/user-guide/pages.adoc b/docs/modules/ROOT/pages/user-guide/pages.adoc index b332e4ae7..0d01f37d4 100644 --- a/docs/modules/ROOT/pages/user-guide/pages.adoc +++ b/docs/modules/ROOT/pages/user-guide/pages.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Pages A page is a collection of link:../reports[reports] that can be viewed at diff --git a/docs/modules/ROOT/pages/user-guide/publishing.adoc b/docs/modules/ROOT/pages/user-guide/publishing.adoc index 2b1015a03..8fe77739c 100644 --- a/docs/modules/ROOT/pages/user-guide/publishing.adoc +++ b/docs/modules/ROOT/pages/user-guide/publishing.adoc @@ -1,3 +1,5 @@ +include::../banner.adoc[] + = Publishing When you are done building a dashboard, you may want to *publish* that diff --git a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc index d28f4c6bc..9d3c4a79e 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Area Map link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc index 56a8773c1..6a280c750 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Bar Chart A bar chart will draw categories and values in a familiar bar-layout. diff --git a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc index 35fdbdd19..8cfd6037c 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Choropleth link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc index 61146b24d..cab5079bd 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Circle Packing link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/form.adoc b/docs/modules/ROOT/pages/user-guide/reports/form.adoc index d7817f171..f10776561 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/form.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/form.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Form A form is a special type of report that lets users run predefined, parameterized queries. diff --git a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc index c54567aa5..0332fdd04 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Gantt Chart link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc index 067acd6aa..41ed80eba 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Gauge Chart link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc index 4d18523dd..8638ac9e6 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Graph The graph report will render all returned nodes, relationships and paths diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc index 31d2ef6a2..d2ddeb9dc 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = 3D Graph link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc index 44e822e08..8f0fb9598 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = iFrame An iFrame report lets you embed a webpage inside your NeoDash dashboard. diff --git a/docs/modules/ROOT/pages/user-guide/reports/index.adoc b/docs/modules/ROOT/pages/user-guide/reports/index.adoc index da44ed606..d05324060 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/index.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Reports A report is the smallest building build of your dashboard. Each report diff --git a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc index ec0c21d52..56adcd965 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Line Chart A line chart can be used to draw one or more lines in a two-dimensional diff --git a/docs/modules/ROOT/pages/user-guide/reports/map.adoc b/docs/modules/ROOT/pages/user-guide/reports/map.adoc index 081b917f2..4779c3c98 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/map.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/map.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Map The map report will render all returned nodes, relationships and paths diff --git a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc index fc09c3726..85d19cec6 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Markdown Markdown reports let you specify diff --git a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc index 2951b7133..cfa09b69a 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Parameter Select Parameter select reports provide you with an easy way to add interactivity into your dashboards. diff --git a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc index 9300388a7..f4ad133b5 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Pie Chart A pie chart will draw categories and values in a circular disc layout. diff --git a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc index 4cd805e22..e6a4bcaf6 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Radar Chart link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc index cf523529e..ec9725e83 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Raw JSON The Raw JSON report renders the JSON response received from Neo4j diff --git a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc index f725d2d3e..22d014803 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Sankey Chart link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc index 593f92a11..f5a2f99c7 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Single Value A single value report will render the first column of the first row diff --git a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc index c3385bcdc..6f17c7541 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Sunburst link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] diff --git a/docs/modules/ROOT/pages/user-guide/reports/table.adoc b/docs/modules/ROOT/pages/user-guide/reports/table.adoc index 8bb11cb14..8b352f2c2 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/table.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/table.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Table The most common report in a dashboard is often a simple table view. diff --git a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc index 9a07ec12a..a8e620060 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc @@ -1,3 +1,5 @@ +include::../../banner.adoc[] + = Treemap link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] From 33aa485a283a964f21e6d6e5e7c11fa3214fa017 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Mon, 11 Nov 2024 10:10:03 +0100 Subject: [PATCH 115/120] Updated README --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index eab8ff231..4c7934bbe 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) NeoDash is evolving into a fully supported dashboard builder, as part of the Neo4j product suite**. -This project (NeoDash Labs) will continue to exist and contain experimental features. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. +This project (NeoDash Labs) will continue to exist and contain experimental features, but will have official support. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. ## About NeoDash NeoDash is a web-based tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports. @@ -17,8 +17,10 @@ Neodash supports presenting your data as tables, graphs, bar charts, line charts ## Try NeoDash You can run NeoDash in one of three ways: -1. You can install NeoDash into Neo4j Desktop from the [graph app gallery](https://install.graphapp.io). NeoDash will automatically connect to your active database. -2. You can run NeoDash from a web browser by visiting http://neodash.graphapp.io. +1. You can install NeoDash Labs into Neo4j Desktop from the [graph app gallery](https://install.graphapp.io). NeoDash will automatically connect to your active database. +> Note: never versions of Neo4j Desktop do not support adding experimental graph apps such as NeoDash. + +2. You can run NeoDash Labs from a web browser by visiting http://neodash.graphapp.io. 3. For on-prem deployments, you can build the application yourself, or pull the latest Docker image from Docker Hub. ``` # Run the application on http://localhost:5005 @@ -87,4 +89,4 @@ If you have any questions about NeoDash, please reach out to the maintainers: - Connect with us on the [Neo4j Discord](https://neo4j.com/developer/discord/). - Create a post on the Neo4j [Community Forum](https://community.neo4j.com/). -> NeoDash Labs is a free and open-source tool developed by the Neo4j community - not an official Neo4j product. If you have a need for a commercial agreement around training, custom extensions or other services, please contact your [Neo4j Account Manager](hhttps://neo4j.com/contact-us/). \ No newline at end of file +> NeoDash Labs is a free and open-source tool developed by the Neo4j community - not an official Neo4j product. Use at your own risk! \ No newline at end of file From 416b8f87df1b8fb89d54675868a8f8bfe1e8e614 Mon Sep 17 00:00:00 2001 From: Aleksandar Date: Tue, 12 Nov 2024 11:44:44 +0100 Subject: [PATCH 116/120] Current Users or ALL Users getting deleted in an Update (#906) * fixed: when updating a user permission by DELETING a user from a certain role, it drops ALL the users. Also if you add a user to a role it will still keep the role on previously added users * updated the code so that if datbase selected is empty we show feedback there is nothing to fetch and do not provide labels and also enable to save users to role even though db is empty --------- Co-authored-by: Niels de Jong --- src/extensions/rbac/RBACManagementModal.tsx | 85 +++++++++++++-------- src/extensions/rbac/RBACUtils.ts | 73 ++++++++++-------- 2 files changed, 96 insertions(+), 62 deletions(-) diff --git a/src/extensions/rbac/RBACManagementModal.tsx b/src/extensions/rbac/RBACManagementModal.tsx index f3f17a08c..a69e211bc 100644 --- a/src/extensions/rbac/RBACManagementModal.tsx +++ b/src/extensions/rbac/RBACManagementModal.tsx @@ -32,6 +32,7 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti const [allowCompleted, setAllowCompleted] = useState(false); const [usersCompleted, setUsersCompleted] = useState(false); const [failed, setFailed] = useState(false); + const [isDatabaseEmpty, setIsDatabaseEmpty] = useState(false); useEffect(() => { if (!open) { @@ -75,35 +76,48 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti const handleDatabaseSelect = (selectedOption) => { setSelectedDatabase(selectedOption.value); - retrieveLabelsList(driver, selectedOption.value, (records) => parseLabelsList(selectedOption.value, records)); + setLabels([]); + setAllowList([]); + setDenyList([]); + retrieveLabelsList(driver, selectedOption.value, (records) => { + if (records.length === 0) { + setIsDatabaseEmpty(true); + } else { + parseLabelsList(selectedOption.value, records); + setIsDatabaseEmpty(false); + } + }); }; const handleSave = async () => { createNotification('Updating', `Access for role '${currentRole}' is being updated, please wait...`); - console.log(selectedUsers); - updateUsers( - driver, - currentRole, - neo4jUsers, - selectedUsers, - () => setUsersCompleted(true), - (failReason) => setFailed(`Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${failReason}`) - ); - - if (selectedDatabase) { - const nonFixedDenyList = denyList.filter((n) => !fixedDenyList.includes(n)); - const nonFixedAllowList = allowList.filter((n) => !fixedDenyList.includes(n)); - updatePrivileges( + try { + await updateUsers( driver, - selectedDatabase, currentRole, - labels, - nonFixedDenyList, - Operation.DENY, - () => setDenyCompleted(true), - (failReason) => setFailed(`Operation 'DENY LABEL ACCESS' failed.\n Reason: ${failReason}`) - ).then(() => { - updatePrivileges( + neo4jUsers, + selectedUsers, + () => setUsersCompleted(true), + (failReason) => setFailed(`Operation 'ROLE-USER ASSIGNMENT' failed.\n Reason: ${failReason}`) + ); + + if (selectedDatabase && labels.length > 0) { + // Check if there are labels to update + const nonFixedDenyList = denyList.filter((n) => !fixedDenyList.includes(n)); + const nonFixedAllowList = allowList.filter((n) => !fixedDenyList.includes(n)); + + await updatePrivileges( + driver, + selectedDatabase, + currentRole, + labels, + nonFixedDenyList, + Operation.DENY, + () => setDenyCompleted(true), + (failReason) => setFailed(`Operation 'DENY LABEL ACCESS' failed.\n Reason: ${failReason}`) + ); + + await updatePrivileges( driver, selectedDatabase, currentRole, @@ -113,14 +127,18 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti () => setAllowCompleted(true), (failReason) => setFailed(`Operation 'ALLOW LABEL ACCESS' failed.\n Reason: ${failReason}`) ); - }); - } else { - // Since there is no database selected, we don't run the DENY/ALLOW queries. - // We just mark them as completed so the success message shows up. - setDenyCompleted(true); - setAllowCompleted(true); + } else { + // Since there is no database or labels selected, we don't run the DENY/ALLOW queries. + // We just mark them as completed so the success message shows up. + setDenyCompleted(true); + setAllowCompleted(true); + } + } catch (error) { + // Handle any errors that occur during the update process + createNotification('error', `An error occurred: ${error.message}`); + } finally { + handleClose(); } - handleClose(); }; return ( @@ -171,8 +189,13 @@ export const RBACManagementModal = ({ open, handleClose, currentRole, createNoti onChange: handleDatabaseSelect, }} /> + {selectedDatabase && isDatabaseEmpty && ( +

    + This database is currently empty. Please select a different database or add labels to manage access. +

    + )} - {selectedDatabase && loaded && ( + {selectedDatabase && !isDatabaseEmpty && loaded && ( <>
    diff --git a/src/extensions/rbac/RBACUtils.ts b/src/extensions/rbac/RBACUtils.ts index c93d54e56..6fc56d375 100644 --- a/src/extensions/rbac/RBACUtils.ts +++ b/src/extensions/rbac/RBACUtils.ts @@ -217,15 +217,24 @@ export const retrieveNeo4jUsers = (driver, currentRole, setNeo4jUsers, setRoleUs * @param setLabels callback to update the list of labels. */ export function retrieveLabelsList(driver, database: any, setLabels: (records: any) => void) { - runCypherQuery( - driver, - database.value, - 'CALL db.labels()', - {}, - 1000, - () => {}, - (records) => setLabels(records) - ); + let labelsSet = false; // Flag to track if setLabels was called + + // Wrapper around the original setLabels to set the flag when called + const wrappedSetLabels = (records) => { + labelsSet = true; + setLabels(records); + }; + + runCypherQuery(driver, database, 'CALL db.labels()', {}, 1000, () => {}, wrappedSetLabels) + .then(() => { + if (!labelsSet) { + setLabels([]); + } + }) + .catch((error) => { + console.error('Error retrieving labels:', error); + setLabels([]); + }); } /** @@ -265,8 +274,31 @@ export async function updateUsers(driver, currentRole, allUsers, selectedUsers, `REVOKE ROLE ${currentRole} FROM ${escapedAllUsers}`, {}, 1000, - (status) => { + async (status) => { globalStatus = status; + if (globalStatus == QueryStatus.NO_DATA || globalStatus == QueryStatus.COMPLETE) { + // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. + // We build in an artificial delay... This must be improved the future. + setTimeout(async () => { + if (selectedUsers.length > 0) { + const escapedSelectedUsers = selectedUsers.map((user) => `\`${user}\``).join(','); + await runCypherQuery( + driver, + 'system', + `GRANT ROLE ${currentRole} TO ${escapedSelectedUsers};`, + {}, + 1000, + (status) => { + if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { + onSuccess(); + } + } + ); + } else { + onSuccess(); + } + }, 2000); + } }, (records) => { if (records && records[0] && records[0].error) { @@ -274,25 +306,4 @@ export async function updateUsers(driver, currentRole, allUsers, selectedUsers, } } ); - if (globalStatus == QueryStatus.NO_DATA || globalStatus == QueryStatus.COMPLETE) { - // TODO: Neo4j is very slow in updating after the previous query, even though it is technically a finished query. - // We build in an artificial delay... - if (selectedUsers.length > 0) { - const escapedSelectedUsers = selectedUsers.map((user) => `\`${user}\``).join(','); - await runCypherQuery( - driver, - 'system', - `GRANT ROLE ${currentRole} TO ${escapedSelectedUsers}`, - {}, - 1000, - (status) => { - if (status == QueryStatus.NO_DATA || QueryStatus.COMPLETE) { - onSuccess(); - } - } - ); - } else { - onSuccess(); - } - } } From 906333aecbdebfb50e35e483cd8e6b628ebbaf92 Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Thu, 14 Nov 2024 10:49:40 +0100 Subject: [PATCH 117/120] Finalized release notes and updated README for 2.4.9 --- README.md | 8 +++----- changelog.md | 20 ++++++++++++++++++-- release-notes.md | 20 ++++++++++++++++++-- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4c7934bbe..7ba0e71da 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,14 @@ In September 2024 **Neo4j [announced](https://www.datanami.com/2024/09/04/neo4j-simplifies-graph-database-in-the-cloud/#:~:text=NeoDash%20is%20an%20open%20source,was%20open%20source%2C%20not%20supported) NeoDash is evolving into a fully supported dashboard builder, as part of the Neo4j product suite**. -This project (NeoDash Labs) will continue to exist and contain experimental features, but will have official support. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. +This project (NeoDash Labs) will still be available and contain experimental features, but will **not** have official support. If you're interested to get official support for NeoDash as part of a Neo4j License agreement, please reach out to your Neo4j contact person. -## About NeoDash +## About NeoDash Labs NeoDash is a web-based tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports. - - Neodash supports presenting your data as tables, graphs, bar charts, line charts, maps and more. It contains a Cypher editor to directly write the Cypher queries that populate the reports. You can save dashboards to your database, and share them with others. -## Try NeoDash +## Try NeoDash Labs You can run NeoDash in one of three ways: 1. You can install NeoDash Labs into Neo4j Desktop from the [graph app gallery](https://install.graphapp.io). NeoDash will automatically connect to your active database. diff --git a/changelog.md b/changelog.md index c23596fba..9227e1fff 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,22 @@ ## NeoDash 2.4.9 -This release adds some minor changes to documentation and resolves some open legacy issues. -- Added notice about project evolution. +This release adds some minor changes to documentation and implements some community contributions. +- Added notice about project evolution: [#967](https://github.com/neo4j-labs/neodash/pull/967) +- Added community contributions and bug fixes: +[#967](https://github.com/neo4j-labs/neodash/pull/967) +[#894](https://github.com/neo4j-labs/neodash/pull/894) +[#822](https://github.com/neo4j-labs/neodash/pull/822) +[#951](https://github.com/neo4j-labs/neodash/pull/951) +[#946](https://github.com/neo4j-labs/neodash/pull/946) +[#944](https://github.com/neo4j-labs/neodash/pull/944) +[#943](https://github.com/neo4j-labs/neodash/pull/943) +[#938](https://github.com/neo4j-labs/neodash/pull/938) +[#935](https://github.com/neo4j-labs/neodash/pull/935) +[#918](https://github.com/neo4j-labs/neodash/pull/918) +[#908](https://github.com/neo4j-labs/neodash/pull/908) +[#906](https://github.com/neo4j-labs/neodash/pull/906) +[#902](https://github.com/neo4j-labs/neodash/pull/902) +[#895](https://github.com/neo4j-labs/neodash/pull/895) +[#893](https://github.com/neo4j-labs/neodash/pull/893) ## NeoDash 2.4.8 This is a minor release containing an important fix and other minor fixes: diff --git a/release-notes.md b/release-notes.md index cfdc92735..68200808b 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,3 +1,19 @@ ## NeoDash 2.4.9 -This release adds some minor changes to documentation and resolves some open legacy issues. -- Added notice about project evolution. +This release adds some minor changes to documentation and implements some community contributions. +- Added notice about project evolution: [#967](https://github.com/neo4j-labs/neodash/pull/967) +- Added community contributions and bug fixes: +[#967](https://github.com/neo4j-labs/neodash/pull/967) +[#894](https://github.com/neo4j-labs/neodash/pull/894) +[#822](https://github.com/neo4j-labs/neodash/pull/822) +[#951](https://github.com/neo4j-labs/neodash/pull/951) +[#946](https://github.com/neo4j-labs/neodash/pull/946) +[#944](https://github.com/neo4j-labs/neodash/pull/944) +[#943](https://github.com/neo4j-labs/neodash/pull/943) +[#938](https://github.com/neo4j-labs/neodash/pull/938) +[#935](https://github.com/neo4j-labs/neodash/pull/935) +[#918](https://github.com/neo4j-labs/neodash/pull/918) +[#908](https://github.com/neo4j-labs/neodash/pull/908) +[#906](https://github.com/neo4j-labs/neodash/pull/906) +[#902](https://github.com/neo4j-labs/neodash/pull/902) +[#895](https://github.com/neo4j-labs/neodash/pull/895) +[#893](https://github.com/neo4j-labs/neodash/pull/893) \ No newline at end of file From d822773651bdcc594afe5b51374e5bebd95a635e Mon Sep 17 00:00:00 2001 From: Morgan Senechal Date: Thu, 14 Nov 2024 10:33:14 +0000 Subject: [PATCH 118/120] [Feature #884] Helm chart for Kubernetes deployments PR#902 (#971) * Include the Helm Chart and Kubernetes YAMLs - Includes the Helm chart required for the NeoDash deployment for the Kubernetes clusters - Includes the example YAML files for the Kubernetes manifests - Appropriate document changes to include the new Kubernetes deployments. Signed-off-by: Lolla, Venkata * Fix the chart notes Signed-off-by: Lolla, Venkata * Patch a typo in the build-and-run.adoc file Signed-off-by: Lolla, Venkata * Resolves SonarCloud warning Signed-off-by: Lolla, Venkata * Review + small fixes, LGTM --------- Signed-off-by: Lolla, Venkata Co-authored-by: Lolla, Venkata --- .../pages/developer-guide/build-and-run.adoc | 119 +++++++++++++++++- k8s-deploy/neodash/.helmignore | 23 ++++ k8s-deploy/neodash/Chart.yaml | 24 ++++ k8s-deploy/neodash/README.md | 78 ++++++++++++ k8s-deploy/neodash/templates/NOTES.txt | 26 ++++ k8s-deploy/neodash/templates/_helpers.tpl | 62 +++++++++ k8s-deploy/neodash/templates/deployment.yaml | 76 +++++++++++ k8s-deploy/neodash/templates/hpa.yaml | 32 +++++ k8s-deploy/neodash/templates/ingress.yaml | 61 +++++++++ k8s-deploy/neodash/templates/service.yaml | 19 +++ .../neodash/templates/serviceaccount.yaml | 13 ++ .../templates/tests/test-connection.yaml | 18 +++ k8s-deploy/neodash/values.yaml | 108 ++++++++++++++++ k8s-deploy/sample-k8s-yamls/deployment.yaml | 66 ++++++++++ k8s-deploy/sample-k8s-yamls/service.yaml | 17 +++ 15 files changed, 741 insertions(+), 1 deletion(-) create mode 100644 k8s-deploy/neodash/.helmignore create mode 100644 k8s-deploy/neodash/Chart.yaml create mode 100644 k8s-deploy/neodash/README.md create mode 100644 k8s-deploy/neodash/templates/NOTES.txt create mode 100644 k8s-deploy/neodash/templates/_helpers.tpl create mode 100644 k8s-deploy/neodash/templates/deployment.yaml create mode 100644 k8s-deploy/neodash/templates/hpa.yaml create mode 100644 k8s-deploy/neodash/templates/ingress.yaml create mode 100644 k8s-deploy/neodash/templates/service.yaml create mode 100644 k8s-deploy/neodash/templates/serviceaccount.yaml create mode 100644 k8s-deploy/neodash/templates/tests/test-connection.yaml create mode 100644 k8s-deploy/neodash/values.yaml create mode 100644 k8s-deploy/sample-k8s-yamls/deployment.yaml create mode 100644 k8s-deploy/sample-k8s-yamls/service.yaml diff --git a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc index 45cbc2641..c28548f57 100644 --- a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc +++ b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc @@ -76,7 +76,9 @@ docker run -it –rm -p 5005:5005 neodash == Run on Kubernetes -An example of a pod definition YAML file to create a NeoDash pod in a cluster: +=== To deploy using YAML files + +YAML examples are available in the https://github.com/neo4j-labs/neodash[NeoDash repository]. Here is an example of a pod definition YAML file to create a NeoDash pod in a cluster: .... apiVersion: v1 @@ -108,3 +110,118 @@ spec: selector: project: neodash .... + +=== To deploy using a Helm Charts + +A Kubernetes Helm chart is available in the https://github.com/neo4j-labs/neodash[the NeoDash repository] and here is the full example of the Helm chart values.yaml file, + +.... +# Name override or full name override +nameOverride: '' +fullnameOverride: neodash-test + +# Number of pods +replicaCount: 1 + +# Image Details +image: + repository: neo4jlabs/neodash + pullPolicy: IfNotPresent + tag: 'latest' +imagePullSecrets: [] # Image pull secret if any + +# Pod annotations, labels and security context +podAnnotations: {} +podLabels: {} +podSecurityContext: {} + +# Mode configuration using environment variables +# Set reader mode environment variables when enable_reader_mode is true +enable_reader_mode: true +env: + - name: "ssoEnabled" + value: "false" + - name: "standalone" + value: "true" + - name: "standaloneProtocol" + value: "neo4j+s" + - name: "standaloneHost" + value: "localhost" + - name: "standalonePort" + value: "7687" + - name: "standaloneDatabase" + value: neo4j + - name: "standaloneDashboardName" + value: "test" + - name: "standaloneDashboardDatabase" + value: neo4j + - name: "standaloneAllowLoad" + value: "false" + - name: "standaloneLoadFromOtherDatabases" + value: "false" + - name: "standaloneMultiDatabase" + value: "false" + +# Environment variable from secret +envFromSecrets: [] + # standaloneUsername: + # secretName: "neo4j-connection-secrets" + # key: "username" + # standalonePassword: + # secretName: "neo4j-connection-secrets" + # key: "password" + +# Service details +service: + type: LoadBalancer # Can also be ClusterIP or NodePort + port: 5005 # For the service to listen in for Traffic + targetPort: 5005 # Target port is the container port + annotations: {} # Service annotations for the LoadBalance + +# Ingress +ingress: + enabled: false # Enable Kubernetes Ingress + className: 'alb' # Class Name + annotations: {} # Cloud LoadBalancer annotations + hosts: [] + # - host: neodash.example.com + # paths: + # - path: '/' + # pathType: Prefix + tls: [] + +# Pod resources request, limits and health check +resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" +livenessProbe: + httpGet: + path: /* + port: 5005 +readinessProbe: + httpGet: + path: /* + port: 5005 + +# Pod Autoscaler +autoscaling: + enabled: false + # minReplicas: 1 + # maxReplicas: 100 + # targetCPUUtilizationPercentage: 80 + +# Pod Volumes +volumes: [] +volumeMounts: [] + +# Service Account +serviceAccount: + create: true + automount: true + # annotations: {} + # name: '' +.... \ No newline at end of file diff --git a/k8s-deploy/neodash/.helmignore b/k8s-deploy/neodash/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/k8s-deploy/neodash/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/k8s-deploy/neodash/Chart.yaml b/k8s-deploy/neodash/Chart.yaml new file mode 100644 index 000000000..41e4e6c4e --- /dev/null +++ b/k8s-deploy/neodash/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: neodash +description: A NeoDash Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 1.0.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "2.4.9" \ No newline at end of file diff --git a/k8s-deploy/neodash/README.md b/k8s-deploy/neodash/README.md new file mode 100644 index 000000000..0185710c9 --- /dev/null +++ b/k8s-deploy/neodash/README.md @@ -0,0 +1,78 @@ +# NeoDash + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.16.0](https://img.shields.io/badge/AppVersion-1.16.0-informational?style=flat-square) + +A NeoDash Helm chart for Kubernetes + +## Resources + +Following are the Kubernetes resources utilized for the NeoDash. + +- Deployment +- Service +- Ingress +- Service Account +- Horizontal Pod Autoscalar (HPA) + +## Values Configuration + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| autoscaling.enabled | bool | `false` | Enable/disable Autoscaling | +| enable_reader_mode | bool | `true` | Enable/disable Reader mode | +| envFromSecrets | list | `[]` | Environment variables from secrets | +| fullnameOverride | string | `"neodash-test"` | Name override applies to all resources | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | +| image.repository | string | `"neo4jlabs/neodash"` | Image repository and Image name | +| image.tag | string | `"latest"` | Image version | +| imagePullSecrets | list | `[]` | Image pull secrets if any | +| podAnnotations | object | `{}` | Pod annotations | +| podLabels | object | `{}` | Additional labels | +| podSecurityContext | object | `{}` | Security Context if any | +| ingress.annotations | object | `{}` | Ingress Annotations for load balancers | +| ingress.className | string | `"alb"` | Ingress Class | +| ingress.enabled | bool | `false` | Enable/disable Ingress | +| ingress.hosts | list | `[]` | Host Details | +| ingress.tls | list | `[]` | TLS details | +| livenessProbe.httpGet.path | string | `"/*"` | LivenessProbe path | +| livenessProbe.httpGet.port | int | `5005` | LivenessProbe port | +| readinessProbe.httpGet.path | string | `"/*"` | Readiness path | +| readinessProbe.httpGet.port | int | `5005` | Readiness port | +| replicaCount | int | `1` | Replica count | +| resources.limits.cpu | string | `"500m"` | CPU limit | +| resources.limits.memory | string | `"128Mi"` | Memory limit | +| resources.requests.cpu | string | `"250m"` | CPU request | +| resources.requests.memory | string | `"64Mi"` | Memory request | +| service.annotations | object | `{}` | Service annotations | +| service.port | int | `5005` | Service port | +| service.targetPort | int | `5005` | Service target port | +| service.type | string | `"LoadBalancer"` | Type of service, other options are `ClusterIP` or `NodePort` | +| serviceAccount.automount | bool | `true` | Enable/disable service account auto mount to pod | +| serviceAccount.create | bool | `true` | Enable/disable service account | +| volumeMounts | list | `[]` | Volume mounts on pod | +| volumes | list | `[]` | Volumes for pod | +| env | list |
    - name: "ssoEnabled" 
  value: "false" 
- name: "standalone" 
  value: "true" 
- name: "standaloneProtocol" 
  value: "neo4j+s" 
- name: "standaloneHost" 
  value: "localhost" 
- name: "standalonePort" 
  value: "7687" 
- name: "standaloneDatabase" 
  value: "neo4j" 
- name: "standaloneDashboardName" 
  value: "test" 
- name: "standaloneDashboardDatabase" 
  value: "neo4j" 
- name: "standaloneAllowLoad" 
  value: "false" 
- name: "standaloneLoadFromOtherDatabases" 
  value: "false" 
- name: "standaloneMultiDatabase" 
  value: "false" 
    | Env variables for reader mode | + +## Usage + +- To install this helm chart run the following command, + + ```bash + helm install ./neodash -n + ``` + +- To upgrade the release run the following command, + + ```bash + helm upgrade ./neodash -n + ``` + +- To uninstall the release run the following command, + + ```bash + helm uninstall -n + ``` + +> **Note:** To use custom values files, pass `-f .yaml` for the above command. +> **Note:** To use custom values, pass `--set param=value` for the above command. +For example, to install neodash and set the service type to NodePort, run: `helm install ./neodash -n --set service.type=NodePort` diff --git a/k8s-deploy/neodash/templates/NOTES.txt b/k8s-deploy/neodash/templates/NOTES.txt new file mode 100644 index 000000000..099242813 --- /dev/null +++ b/k8s-deploy/neodash/templates/NOTES.txt @@ -0,0 +1,26 @@ +The NeoDash application has been successfully deployed, here is the application URL: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + Run the following command to retrieve the IP address: + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "neodash.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of the LoadBalancer by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "neodash.fullname" . }}' + + Once available, run the following command to retrieve the IP address: + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "neodash.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + Run the following command to retrieve the IP address: + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "neodash.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT +{{- end }} \ No newline at end of file diff --git a/k8s-deploy/neodash/templates/_helpers.tpl b/k8s-deploy/neodash/templates/_helpers.tpl new file mode 100644 index 000000000..9bb54f5c5 --- /dev/null +++ b/k8s-deploy/neodash/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "neodash.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "neodash.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "neodash.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "neodash.labels" -}} +helm.sh/chart: {{ include "neodash.chart" . }} +{{ include "neodash.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "neodash.selectorLabels" -}} +app.kubernetes.io/name: {{ include "neodash.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "neodash.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "neodash.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/k8s-deploy/neodash/templates/deployment.yaml b/k8s-deploy/neodash/templates/deployment.yaml new file mode 100644 index 000000000..63778a9c1 --- /dev/null +++ b/k8s-deploy/neodash/templates/deployment.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "neodash.fullname" . }} + labels: + {{- include "neodash.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "neodash.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "neodash.labels" . | nindent 8 }} + {{- with .Values.podLabels }} + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "neodash.serviceAccountName" . }} + automountServiceAccountToken: false + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- with .Values.podSecurityContext }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 12 }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.targetPort }} + protocol: TCP + env: + {{- if ne 5005 (int .Values.service.targetPort) }} + - name: NGINX_PORT + value: {{ .Values.service.port | quote }} + {{- end }} + {{- if .Values.enable_reader_mode}} + {{- with .Values.env }} + {{- toYaml . | nindent 12 }} + {{- end }} + {{- if .Values.envFromSecrets }} + {{- range $key, $value := .Values.envFromSecrets }} + - name: {{ $key }} + valueFrom: + secretKeyRef: + name: {{ $value.secretName }} + key: {{ $value.key }} + {{- end }} + {{- end }} + {{- end }} + livenessProbe: + {{- toYaml .Values.livenessProbe | nindent 12 }} + readinessProbe: + {{- toYaml .Values.readinessProbe | nindent 12 }} + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.volumeMounts }} + volumeMounts: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.volumes }} + volumes: + {{- toYaml . | nindent 8 }} + {{- end }} \ No newline at end of file diff --git a/k8s-deploy/neodash/templates/hpa.yaml b/k8s-deploy/neodash/templates/hpa.yaml new file mode 100644 index 000000000..ce2bae2db --- /dev/null +++ b/k8s-deploy/neodash/templates/hpa.yaml @@ -0,0 +1,32 @@ +{{- if .Values.autoscaling.enabled }} +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "neodash.fullname" . }} + labels: + {{- include "neodash.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "neodash.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} diff --git a/k8s-deploy/neodash/templates/ingress.yaml b/k8s-deploy/neodash/templates/ingress.yaml new file mode 100644 index 000000000..8dccdc279 --- /dev/null +++ b/k8s-deploy/neodash/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "neodash.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "neodash.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/k8s-deploy/neodash/templates/service.yaml b/k8s-deploy/neodash/templates/service.yaml new file mode 100644 index 000000000..b1080ab59 --- /dev/null +++ b/k8s-deploy/neodash/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "neodash.fullname" . }} + labels: + {{- include "neodash.labels" . | nindent 4 }} + {{- with .Values.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: {{ .Values.service.targetPort }} + protocol: TCP + name: http + selector: + {{- include "neodash.selectorLabels" . | nindent 4 }} \ No newline at end of file diff --git a/k8s-deploy/neodash/templates/serviceaccount.yaml b/k8s-deploy/neodash/templates/serviceaccount.yaml new file mode 100644 index 000000000..a7dd2c3ac --- /dev/null +++ b/k8s-deploy/neodash/templates/serviceaccount.yaml @@ -0,0 +1,13 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "neodash.serviceAccountName" . }} + labels: + {{- include "neodash.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +automountServiceAccountToken: {{ .Values.serviceAccount.automount }} +{{- end }} diff --git a/k8s-deploy/neodash/templates/tests/test-connection.yaml b/k8s-deploy/neodash/templates/tests/test-connection.yaml new file mode 100644 index 000000000..b7def4d87 --- /dev/null +++ b/k8s-deploy/neodash/templates/tests/test-connection.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "neodash.fullname" . }}-test-connection" + labels: + {{- include "neodash.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + automountServiceAccountToken: false + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "neodash.fullname" . }}:{{ .Values.service.port }}'] + resources: + {{- toYaml .Values.resources | nindent 8 }} + restartPolicy: Never diff --git a/k8s-deploy/neodash/values.yaml b/k8s-deploy/neodash/values.yaml new file mode 100644 index 000000000..56b781213 --- /dev/null +++ b/k8s-deploy/neodash/values.yaml @@ -0,0 +1,108 @@ +# Name override or full name override +nameOverride: '' +fullnameOverride: neodash-test + +# Number of pods +replicaCount: 1 + +# Image Details +image: + repository: neo4jlabs/neodash + pullPolicy: IfNotPresent + tag: 'latest' +imagePullSecrets: [] # Image pull secret if any + +# Pod annotations, labels and security context +podAnnotations: {} +podLabels: {} +podSecurityContext: {} + +# Mode configuration using environment variables +# Set reader mode environment variables when enable_reader_mode is true +enable_reader_mode: true +env: + - name: "ssoEnabled" + value: "false" + - name: "standalone" + value: "true" + - name: "standaloneProtocol" + value: "neo4j+s" + - name: "standaloneHost" + value: "localhost" + - name: "standalonePort" + value: "7687" + - name: "standaloneDatabase" + value: neo4j + - name: "standaloneDashboardName" + value: "test" + - name: "standaloneDashboardDatabase" + value: neo4j + - name: "standaloneAllowLoad" + value: "false" + - name: "standaloneLoadFromOtherDatabases" + value: "false" + - name: "standaloneMultiDatabase" + value: "false" + +# Environment variable from secret +envFromSecrets: [] + # standaloneUsername: + # secretName: "neo4j-connection-secrets" + # key: "username" + # standalonePassword: + # secretName: "neo4j-connection-secrets" + # key: "password" + +# Service details +service: + type: LoadBalancer # Can also be ClusterIP or NodePort + port: 5005 # For the service to listen in for Traffic + targetPort: 5005 # Target port is the container port + annotations: {} # Service annotations for the LoadBalance + +# Ingress +ingress: + enabled: false # Enable Kubernetes Ingress + className: 'alb' # Class Name + annotations: {} # Cloud LoadBalancer annotations + hosts: [] + # - host: neodash.example.com + # paths: + # - path: '/' + # pathType: Prefix + tls: [] + +# Pod resources request, limits and health check +resources: + requests: + memory: "64Mi" + cpu: "250m" + limits: + memory: "128Mi" + cpu: "500m" +livenessProbe: + httpGet: + path: /* + port: 5005 +readinessProbe: + httpGet: + path: /* + port: 5005 + +# Pod Autoscaler +autoscaling: + enabled: false + # minReplicas: 1 + # maxReplicas: 100 + # targetCPUUtilizationPercentage: 80 + +# Pod Volumes +volumes: [] +volumeMounts: [] + +# Service Account +serviceAccount: + create: true + automount: true + # annotations: {} + # name: '' \ No newline at end of file diff --git a/k8s-deploy/sample-k8s-yamls/deployment.yaml b/k8s-deploy/sample-k8s-yamls/deployment.yaml new file mode 100644 index 000000000..e9e490a27 --- /dev/null +++ b/k8s-deploy/sample-k8s-yamls/deployment.yaml @@ -0,0 +1,66 @@ +--- +# Source: neodash/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: neodash + labels: + application: neodash-deploy +spec: + replicas: 1 + selector: + matchLabels: + application: neodash-deploy + template: + metadata: + labels: + application: neodash-deploy + spec: + serviceAccountName: neodash-test + automountServiceAccountToken: false + containers: + - name: neodash + image: "neo4jlabs/neodash:latest" + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 5005 + protocol: TCP + env: + - name: ssoEnabled + value: "false" + - name: standalone + value: "true" + - name: standaloneProtocol + value: neo4j+s + - name: standaloneHost + value: localhost + - name: standalonePort + value: "7687" + - name: standaloneDatabase + value: neo4j + - name: standaloneDashboardName + value: test + - name: standaloneDashboardDatabase + value: neo4j + - name: standaloneAllowLoad + value: "false" + - name: standaloneLoadFromOtherDatabases + value: "false" + - name: standaloneMultiDatabase + value: "false" + livenessProbe: + httpGet: + path: /* + port: 5005 + readinessProbe: + httpGet: + path: /* + port: 5005 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 250m + memory: 64Mi \ No newline at end of file diff --git a/k8s-deploy/sample-k8s-yamls/service.yaml b/k8s-deploy/sample-k8s-yamls/service.yaml new file mode 100644 index 000000000..28633b71c --- /dev/null +++ b/k8s-deploy/sample-k8s-yamls/service.yaml @@ -0,0 +1,17 @@ +--- +# Source: neodash/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: neodash + labels: + application: neodash-deploy +spec: + type: LoadBalancer + ports: + - port: 5005 + targetPort: 5005 + protocol: TCP + name: http + selector: + application: neodash-deploy \ No newline at end of file From 23d75048fd69a7532c76638d05b9260a3726885b Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 15 Nov 2024 14:31:14 +0100 Subject: [PATCH 119/120] Fixed banner location causing antora to create an invalid page title (#989) --- .../ROOT/pages/developer-guide/adding-visualizations.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/build-and-run.adoc | 4 ++-- .../ROOT/pages/developer-guide/component-overview.adoc | 3 +-- docs/modules/ROOT/pages/developer-guide/configuration.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/contributing.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc | 3 ++- docs/modules/ROOT/pages/developer-guide/design.adoc | 3 ++- docs/modules/ROOT/pages/developer-guide/index.adoc | 3 ++- docs/modules/ROOT/pages/developer-guide/session-storage.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/state-management.adoc | 4 ++-- .../ROOT/pages/developer-guide/style-configuration.adoc | 4 ++-- docs/modules/ROOT/pages/developer-guide/testing.adoc | 4 ++-- docs/modules/ROOT/pages/index.adoc | 3 ++- docs/modules/ROOT/pages/quickstart.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/access-control.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/bloom-integration.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/dashboards.adoc | 4 ++-- .../user-guide/extensions/access-control-management.adoc | 4 ++-- .../pages/user-guide/extensions/advanced-visualizations.adoc | 3 ++- docs/modules/ROOT/pages/user-guide/extensions/forms.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/extensions/index.adoc | 4 ++-- .../pages/user-guide/extensions/natural-language-queries.adoc | 3 ++- .../ROOT/pages/user-guide/extensions/report-actions.adoc | 4 ++-- .../ROOT/pages/user-guide/extensions/rule-based-styling.adoc | 3 +-- docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/faq.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/index.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/pages.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/publishing.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/areamap.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc | 4 ++-- .../modules/ROOT/pages/user-guide/reports/circle-packing.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/form.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/gantt.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/graph.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/iframe.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/index.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/map.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/markdown.adoc | 4 ++-- .../ROOT/pages/user-guide/reports/parameter-select.adoc | 3 ++- docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/radar.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/sankey.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/single-value.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/table.adoc | 4 ++-- docs/modules/ROOT/pages/user-guide/reports/treemap.adoc | 4 ++-- 53 files changed, 104 insertions(+), 99 deletions(-) diff --git a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc index 4d9fd76eb..11ebdf886 100644 --- a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc +++ b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Adding Visualizations +include::../banner.adoc[] + You can extend NeoDash with your own visualizations without diving deep into the core application. Likewise, adding a new customization to an existing report requires minimal changes. diff --git a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc index f52b88fb5..df15e1c33 100644 --- a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc +++ b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Build & Run +include::../banner.adoc[] + To start developing the application, you will need to set up the development environment. diff --git a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc index 27d78236d..da56627cb 100644 --- a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc +++ b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc @@ -1,7 +1,6 @@ -include::../banner.adoc[] - = Component Overview +include::../banner.adoc[] The image below contains a high-level overview of the component hierarchy within the application. The following conceptual building diff --git a/docs/modules/ROOT/pages/developer-guide/configuration.adoc b/docs/modules/ROOT/pages/developer-guide/configuration.adoc index cca62fdbd..03930186e 100644 --- a/docs/modules/ROOT/pages/developer-guide/configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/configuration.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Configuration +include::../banner.adoc[] + When using a custom NeoDash deployment, there are several settings that can be configured. These mostly relate to link:../standalone-mode[Standalone Mode] and SSO configurations. diff --git a/docs/modules/ROOT/pages/developer-guide/contributing.adoc b/docs/modules/ROOT/pages/developer-guide/contributing.adoc index 90c198ff9..40585f591 100644 --- a/docs/modules/ROOT/pages/developer-guide/contributing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/contributing.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Contributing +include::../banner.adoc[] + Contributions to the project are highly welcomed. Please consider creating a https://github.com/neo4j-labs/neodash/pulls[Pull Request]. Ensure you start from the `develop` branch, and set the merge base to diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index 5646b89ad..0fce98736 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -1,6 +1,7 @@ += Deploy a Build + include::../banner.adoc[] -= Deploy a Build If you have a pre-built NeoDash application, you can easily deploy it on an any webserver. A NeoDash build is "just" a collection of HTML, CSS and JavaScript files, so it can run virtually anywhere. diff --git a/docs/modules/ROOT/pages/developer-guide/design.adoc b/docs/modules/ROOT/pages/developer-guide/design.adoc index 3c7bd32eb..c4a19f9cb 100644 --- a/docs/modules/ROOT/pages/developer-guide/design.adoc +++ b/docs/modules/ROOT/pages/developer-guide/design.adoc @@ -1,6 +1,7 @@ += Design + include::../banner.adoc[] -= Design This page contains some key guidelines for design of the application. This entails code architecture, as well as UX/UI design. diff --git a/docs/modules/ROOT/pages/developer-guide/index.adoc b/docs/modules/ROOT/pages/developer-guide/index.adoc index b9424ebb0..5dbb593fd 100644 --- a/docs/modules/ROOT/pages/developer-guide/index.adoc +++ b/docs/modules/ROOT/pages/developer-guide/index.adoc @@ -1,6 +1,7 @@ += Developer Guide + include::../banner.adoc[] -= Developer Guide This guide contains information for developers looking to deploy NeoDash, or extend it for their own needs. diff --git a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc index 7a668e4a7..17631fdb9 100644 --- a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc +++ b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Session Storage +include::../banner.adoc[] + This reducer serves only to store data that we want to reset at each new session. To connect to it, just define a key and use the predefined actions to set a new pair (key,value) inside of it. Inside the actions there is also an action to delete all the keys that match a precise prefix, it can be useful, for example, to wipe the sessionStorage state for a certain extension, if it stores the data inside the sessionStorage using a prefix (for example look at the query-translator extension at getSessionStorageHistoryKey). \ No newline at end of file diff --git a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc index 58575256e..63212dab1 100644 --- a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc +++ b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Standalone Mode +include::../banner.adoc[] + Next to being a dashboard editor, NeoDash can be deployed in a `standalone mode' - allowing you set up a architecture to publish and read dashboards. diff --git a/docs/modules/ROOT/pages/developer-guide/state-management.adoc b/docs/modules/ROOT/pages/developer-guide/state-management.adoc index 1083bf2c1..72891086b 100644 --- a/docs/modules/ROOT/pages/developer-guide/state-management.adoc +++ b/docs/modules/ROOT/pages/developer-guide/state-management.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = State Management +include::../banner.adoc[] + NeoDash is an application with a complex internal state. If you are planning to extend the application state in some way, make sure you are familiar with https://redux.js.org/[Redux] design patterns. diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index 4d5495a91..f86a73b57 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Style Configuration +include::../banner.adoc[] + When using a custom NeoDash deployment, there are several theme variables that can be configured. These mostly relate to css tokens for link:https://cdn.jsdelivr.net/npm/@neo4j-ndl/base@1.4.0/lib/tokens/css/tokens.css[Needle] and some other brand specific options. diff --git a/docs/modules/ROOT/pages/developer-guide/testing.adoc b/docs/modules/ROOT/pages/developer-guide/testing.adoc index 5c492a375..9bdd93b06 100644 --- a/docs/modules/ROOT/pages/developer-guide/testing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/testing.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Testing +include::../banner.adoc[] + NeoDash uses *Cypress* for automated testing. To install Cypress, check out the official https://docs.cypress.io/guides/getting-started/installing-cypress#What-you-ll-learn[installation diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 83eadebd0..7223154d9 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -1,6 +1,7 @@ += Introduction + include::/banner.adoc[] -= Introduction This portal contains information on getting started with NeoDash - A Low-Code Dashboard Builder for Neo4j. NeoDash is an open source tool for visualizing your Neo4j data. It lets you group visualizations together as dashboards, and allow for interactions between reports. diff --git a/docs/modules/ROOT/pages/quickstart.adoc b/docs/modules/ROOT/pages/quickstart.adoc index 4ae165058..56a341a5d 100644 --- a/docs/modules/ROOT/pages/quickstart.adoc +++ b/docs/modules/ROOT/pages/quickstart.adoc @@ -1,7 +1,7 @@ -include::/banner.adoc[] - = Quickstart +include::/banner.adoc[] + There are three easy ways to run NeoDash and start dashboarding your Neo4j data: . The latest version is always available online: diff --git a/docs/modules/ROOT/pages/user-guide/access-control.adoc b/docs/modules/ROOT/pages/user-guide/access-control.adoc index 47cf3da31..7f3f54e35 100644 --- a/docs/modules/ROOT/pages/user-guide/access-control.adoc +++ b/docs/modules/ROOT/pages/user-guide/access-control.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Access Control +include::../banner.adoc[] + The Access Control feature in NeoDash is a security measure that allows Users with write access or higher privileges to manage who has access to specific dashboards. diff --git a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc index 09dcce58c..4618f2f2c 100644 --- a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc +++ b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Bloom Integration +include::../banner.adoc[] + NeoDash can be linked to Neo4j Bloom perspectives by using https://neo4j.com/docs/bloom-user-guide/current/bloom-tutorial/deep-links/[Bloom Deep Links]. This functionality allows you to combine the power of graph diff --git a/docs/modules/ROOT/pages/user-guide/dashboards.adoc b/docs/modules/ROOT/pages/user-guide/dashboards.adoc index d0aa53b11..87e3f291c 100644 --- a/docs/modules/ROOT/pages/user-guide/dashboards.adoc +++ b/docs/modules/ROOT/pages/user-guide/dashboards.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Dashboards +include::../banner.adoc[] + In NeoDash, a dashboard consists of several pages, each of which can consist of multiple reports. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc index 9a6219c45..d96aa78be 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/access-control-management.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Access Control Management +include::../../banner.adoc[] + This extension lets you manage access control for roles and users, letting you assign users to roles as well as controlling which node labels can be read by a user. This extension is only visible to users with the role of "Administrator" or "Super User". Enabling this extension will allow the admin user to manage the labels of the roles in the database and then attach them to the users. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc index f4e7e8e98..452fff908 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/advanced-visualizations.adoc @@ -1,7 +1,8 @@ -include::../../banner.adoc[] = Advanced Visualizations +include::../../banner.adoc[] + Advanced visualizations let you extend your dashboard with complex, powerful visualizations beyond the standard visualizations. For specific use-cases, these visualizations may convey information that a simple visualization cannot. To use advanced visualizations, enable them in the **Extensions Window**. This makes them selectable inside reports, as well as add examples to the Example window. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc index 3ea8c965e..a11fa9eda 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Forms +include::../../banner.adoc[] + The 'forms' extension lets you combine different parameter selectors to update / modify your graph data. Update queries are predefined by the dashboard builder, and the user is limited to specifying the parameters for the query only. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc index 6d16b1700..e4f589499 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Extensions +include::../../banner.adoc[] + Extensions provide a way to expand the basic functionality of NeoDash with extra features. To enable an extension, open up the extensions window by clicking the puzzle piece icon in the left-sidebar of the screen. This will open up the **Extensions Window**, which lets you toggle active extensions for the current dashboard. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc index 675a00a2d..4ea475ca8 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc @@ -1,6 +1,7 @@ += Text2Cypher - Natural Language Queries + include::../../banner.adoc[] -= Text2Cypher - Natural Language Queries Use natural language to generate Cypher queries in NeoDash. Connect to an LLM through an API, and let NeoDash use your database schema + the report types to generate queries automatically. == How it works diff --git a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc index a381c0076..a2192a5fa 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Report Actions +include::../../banner.adoc[] + link:../#_2_pro_extensions[label:Pro Extension[]] Report actions let dashboard builders add interactivity into dashboards. Actions can be used to achieve: diff --git a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc index 8a4b0ea9c..a68a8525a 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc @@ -1,7 +1,6 @@ -include::../../banner.adoc[] - = Rule-Based Styling +include::../../banner.adoc[] The rule-based styling extension allows users to dynamically color elements in a visualization based on output values. This can be applied to tables, graphs, bar charts, line charts, and more. To use the extension, click on the 'rule-based styling' icon inside the settings of a report. diff --git a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc index a735dbc2c..f94f8f52e 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Workflows +include::../../banner.adoc[] + Introducing an advanced extension for creating, managing, and running workflows with Cypher queries. Simplify ETL flows, execute complex query chains, and run graph data science workloads effortlessly from Neodash. == Enable the extension diff --git a/docs/modules/ROOT/pages/user-guide/faq.adoc b/docs/modules/ROOT/pages/user-guide/faq.adoc index 08ece7dd1..4dfe5b7ce 100644 --- a/docs/modules/ROOT/pages/user-guide/faq.adoc +++ b/docs/modules/ROOT/pages/user-guide/faq.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = FAQ +include::../banner.adoc[] + == 1. How can I learn more about NeoDash? To learn more, check out the following list of resources (blogs, videos diff --git a/docs/modules/ROOT/pages/user-guide/index.adoc b/docs/modules/ROOT/pages/user-guide/index.adoc index d87dffb6d..87cf337e9 100644 --- a/docs/modules/ROOT/pages/user-guide/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/index.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = User Guide +include::../banner.adoc[] + The following pages contain everything you need to get started with NeoDash. diff --git a/docs/modules/ROOT/pages/user-guide/pages.adoc b/docs/modules/ROOT/pages/user-guide/pages.adoc index 0d01f37d4..d49807656 100644 --- a/docs/modules/ROOT/pages/user-guide/pages.adoc +++ b/docs/modules/ROOT/pages/user-guide/pages.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Pages +include::../banner.adoc[] + A page is a collection of link:../reports[reports] that can be viewed at the same time. Each page can have an unlimited number of reports in it, and will switch to a scrollable view when the number of reports do not diff --git a/docs/modules/ROOT/pages/user-guide/publishing.adoc b/docs/modules/ROOT/pages/user-guide/publishing.adoc index 8fe77739c..40dab6fc0 100644 --- a/docs/modules/ROOT/pages/user-guide/publishing.adoc +++ b/docs/modules/ROOT/pages/user-guide/publishing.adoc @@ -1,7 +1,7 @@ -include::../banner.adoc[] - = Publishing +include::/banner.adoc[] + When you are done building a dashboard, you may want to *publish* that dashboard for others to view. The workflow for a continuous dashboarding cycle may look something like this: diff --git a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc index 9d3c4a79e..65e1f5e83 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Area Map +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] The Area Map charts can be used to render geographical based information on geoJson polygons. It's possible to click a polygon to visualize its regions and their related data. diff --git a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc index 6a280c750..58cbd1763 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Bar Chart +include::../../banner.adoc[] + A bar chart will draw categories and values in a familiar bar-layout. The bar chart will require you to choose the following selections: diff --git a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc index 8cfd6037c..9d8ac8ca1 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Choropleth +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A Choropleth chart will render geographical data in geoJson polygons diff --git a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc index cab5079bd..9b19d26a5 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Circle Packing +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A circle packing chart will render hierarchical data in a group of diff --git a/docs/modules/ROOT/pages/user-guide/reports/form.adoc b/docs/modules/ROOT/pages/user-guide/reports/form.adoc index f10776561..3ca3823b3 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/form.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/form.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Form +include::../../banner.adoc[] + A form is a special type of report that lets users run predefined, parameterized queries. A single form can consist of: diff --git a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc index 0332fdd04..ca141db70 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Gantt Chart +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A Gantt chart can be used to visualize tasks on a timeline, as well as their dependencies. diff --git a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc index 41ed80eba..2db58ac39 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Gauge Chart +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A gauge chart takes a single numeric value, and plots it on an animated gauge: diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc index 8638ac9e6..0d3dd7ff0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Graph +include::../../banner.adoc[] + The graph report will render all returned nodes, relationships and paths in a force-directed graph layout. This includes collections (lists) of these objects. diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc index d2ddeb9dc..f890c8032 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = 3D Graph +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] The 3D graph report extends the default graph visualization with another dimension. diff --git a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc index 8f0fb9598..86aed6cd0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = iFrame +include::../../banner.adoc[] + An iFrame report lets you embed a webpage inside your NeoDash dashboard. The page can be loaded from any web address starting with `http://` or `https://`, with some exceptions*. diff --git a/docs/modules/ROOT/pages/user-guide/reports/index.adoc b/docs/modules/ROOT/pages/user-guide/reports/index.adoc index d05324060..e1d0dc083 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/index.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Reports +include::../../banner.adoc[] + A report is the smallest building build of your dashboard. Each report will have a single Cypher query behind it that is used to populate the report. Reports can be of several types (graph, table, bar chart, etc.), diff --git a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc index 56adcd965..0bf0fd5e1 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Line Chart +include::../../banner.adoc[] + A line chart can be used to draw one or more lines in a two-dimensional plane. It requires two numeric fields: diff --git a/docs/modules/ROOT/pages/user-guide/reports/map.adoc b/docs/modules/ROOT/pages/user-guide/reports/map.adoc index 4779c3c98..3d22d132d 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/map.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/map.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Map +include::../../banner.adoc[] + The map report will render all returned nodes, relationships and paths on a geomap. https://www.openstreetmap.org[Open Street Map] is used to visualize the data on the map. diff --git a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc index 85d19cec6..dc7bd0260 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Markdown +include::../../banner.adoc[] + Markdown reports let you specify https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#styling-text[Markdown] text, to be renderer as rich HTML. This lets you turn your dashboards diff --git a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc index cfa09b69a..872ef4bc0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc @@ -1,6 +1,7 @@ += Parameter Select + include::../../banner.adoc[] -= Parameter Select Parameter select reports provide you with an easy way to add interactivity into your dashboards. diff --git a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc index f4ad133b5..79f56848c 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Pie Chart +include::../../banner.adoc[] + A pie chart will draw categories and values in a circular disc layout. The pie chart will require you to choose the following selections: diff --git a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc index e6a4bcaf6..ab2200fe8 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Radar Chart +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A Radar chart can be used to render multivariate data from an array of nodes diff --git a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc index ec9725e83..f97c1783b 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Raw JSON +include::../../banner.adoc[] + The Raw JSON report renders the JSON response received from Neo4j directly. This is typically used for debugging queries, or, understanding the exact data types being returned from Neo4j. diff --git a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc index 22d014803..2b6374672 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Sankey Chart +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A Sankey visualization will generate a flow diagram from nodes and links. diff --git a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc index f5a2f99c7..e855df92f 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Single Value +include::../../banner.adoc[] + A single value report will render the first column of the first row returned by the Cypher query. Single value reports are typically used for key metrics: diff --git a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc index 6f17c7541..30a73fe61 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Sunburst +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A sunburst chart will render hierarchical data in a multi-level pie diff --git a/docs/modules/ROOT/pages/user-guide/reports/table.adoc b/docs/modules/ROOT/pages/user-guide/reports/table.adoc index 8b352f2c2..675daa003 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/table.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/table.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Table +include::../../banner.adoc[] + The most common report in a dashboard is often a simple table view. NeoDash contains a powerful table component that can render all the data returned by a Cypher query. This includes simple data like numbers or diff --git a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc index a8e620060..23c96a69e 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc @@ -1,7 +1,7 @@ -include::../../banner.adoc[] - = Treemap +include::../../banner.adoc[] + link:../../extensions/advanced-visualizations[label:Advanced Visualization[]] A treemap chart will render hierarchical data in a nested rectangle From c909b59bd924d4ac4b8c9a59d37e89b0faf6b60b Mon Sep 17 00:00:00 2001 From: Niels de Jong Date: Fri, 15 Nov 2024 14:35:26 +0100 Subject: [PATCH 120/120] Fixed banner location causing antora to create an invalid page title (#991) --- .../ROOT/pages/developer-guide/adding-visualizations.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/build-and-run.adoc | 2 -- .../modules/ROOT/pages/developer-guide/component-overview.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/configuration.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/contributing.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/design.adoc | 3 ++- docs/modules/ROOT/pages/developer-guide/index.adoc | 3 ++- docs/modules/ROOT/pages/developer-guide/session-storage.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/state-management.adoc | 2 -- .../ROOT/pages/developer-guide/style-configuration.adoc | 2 -- docs/modules/ROOT/pages/developer-guide/testing.adoc | 2 -- docs/modules/ROOT/pages/index.adoc | 2 -- docs/modules/ROOT/pages/quickstart.adoc | 2 -- docs/modules/ROOT/pages/user-guide/bloom-integration.adoc | 2 -- docs/modules/ROOT/pages/user-guide/dashboards.adoc | 2 -- docs/modules/ROOT/pages/user-guide/extensions/forms.adoc | 2 -- docs/modules/ROOT/pages/user-guide/extensions/index.adoc | 2 -- .../pages/user-guide/extensions/natural-language-queries.adoc | 2 -- .../ROOT/pages/user-guide/extensions/report-actions.adoc | 2 -- .../ROOT/pages/user-guide/extensions/rule-based-styling.adoc | 2 -- docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc | 2 -- docs/modules/ROOT/pages/user-guide/faq.adoc | 2 -- docs/modules/ROOT/pages/user-guide/index.adoc | 2 -- docs/modules/ROOT/pages/user-guide/pages.adoc | 2 -- docs/modules/ROOT/pages/user-guide/publishing.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/areamap.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/form.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/gantt.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/graph.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/iframe.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/index.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/map.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/markdown.adoc | 2 -- .../ROOT/pages/user-guide/reports/parameter-select.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/radar.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/sankey.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/single-value.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/table.adoc | 2 -- docs/modules/ROOT/pages/user-guide/reports/treemap.adoc | 2 -- 50 files changed, 4 insertions(+), 98 deletions(-) diff --git a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc index aeea0744e..11ebdf886 100644 --- a/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc +++ b/docs/modules/ROOT/pages/developer-guide/adding-visualizations.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Adding Visualizations include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc index 47503bb16..df15e1c33 100644 --- a/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc +++ b/docs/modules/ROOT/pages/developer-guide/build-and-run.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Build & Run include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc index 24b0df640..da56627cb 100644 --- a/docs/modules/ROOT/pages/developer-guide/component-overview.adoc +++ b/docs/modules/ROOT/pages/developer-guide/component-overview.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Component Overview include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/configuration.adoc b/docs/modules/ROOT/pages/developer-guide/configuration.adoc index 279dc0b2f..03930186e 100644 --- a/docs/modules/ROOT/pages/developer-guide/configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/configuration.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Configuration include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/contributing.adoc b/docs/modules/ROOT/pages/developer-guide/contributing.adoc index 707d723f8..40585f591 100644 --- a/docs/modules/ROOT/pages/developer-guide/contributing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/contributing.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Contributing include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc index d341eed4c..0fce98736 100644 --- a/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc +++ b/docs/modules/ROOT/pages/developer-guide/deploy-a-build.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Deploy a Build include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/design.adoc b/docs/modules/ROOT/pages/developer-guide/design.adoc index fff0687ff..ff32114c9 100644 --- a/docs/modules/ROOT/pages/developer-guide/design.adoc +++ b/docs/modules/ROOT/pages/developer-guide/design.adoc @@ -1,6 +1,7 @@ += Design + include::../banner.adoc[] -= Design include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/index.adoc b/docs/modules/ROOT/pages/developer-guide/index.adoc index 5a086bc9a..63b9218fd 100644 --- a/docs/modules/ROOT/pages/developer-guide/index.adoc +++ b/docs/modules/ROOT/pages/developer-guide/index.adoc @@ -1,6 +1,7 @@ += Developer Guide + include::../banner.adoc[] -= Developer Guide include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc index 8864bb36a..17631fdb9 100644 --- a/docs/modules/ROOT/pages/developer-guide/session-storage.adoc +++ b/docs/modules/ROOT/pages/developer-guide/session-storage.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Session Storage include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc index a4ef994d9..63212dab1 100644 --- a/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc +++ b/docs/modules/ROOT/pages/developer-guide/standalone-mode.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Standalone Mode include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/state-management.adoc b/docs/modules/ROOT/pages/developer-guide/state-management.adoc index 493342cf6..72891086b 100644 --- a/docs/modules/ROOT/pages/developer-guide/state-management.adoc +++ b/docs/modules/ROOT/pages/developer-guide/state-management.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = State Management include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc index 8ec08ac75..f86a73b57 100644 --- a/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc +++ b/docs/modules/ROOT/pages/developer-guide/style-configuration.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Style Configuration include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/developer-guide/testing.adoc b/docs/modules/ROOT/pages/developer-guide/testing.adoc index e95a21012..9bdd93b06 100644 --- a/docs/modules/ROOT/pages/developer-guide/testing.adoc +++ b/docs/modules/ROOT/pages/developer-guide/testing.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Testing include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 56627a889..7223154d9 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -1,5 +1,3 @@ -include::/banner.adoc[] - = Introduction include::/banner.adoc[] diff --git a/docs/modules/ROOT/pages/quickstart.adoc b/docs/modules/ROOT/pages/quickstart.adoc index 075db6f64..56a341a5d 100644 --- a/docs/modules/ROOT/pages/quickstart.adoc +++ b/docs/modules/ROOT/pages/quickstart.adoc @@ -1,5 +1,3 @@ -include::/banner.adoc[] - = Quickstart include::/banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc index 175996a17..4618f2f2c 100644 --- a/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc +++ b/docs/modules/ROOT/pages/user-guide/bloom-integration.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Bloom Integration include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/dashboards.adoc b/docs/modules/ROOT/pages/user-guide/dashboards.adoc index 3a747f97f..87e3f291c 100644 --- a/docs/modules/ROOT/pages/user-guide/dashboards.adoc +++ b/docs/modules/ROOT/pages/user-guide/dashboards.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Dashboards include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc index 69e6c3d49..a11fa9eda 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/forms.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Forms include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc index 29c1a7981..e4f589499 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/index.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Extensions include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc index 7bb9856f5..4ea475ca8 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/natural-language-queries.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Text2Cypher - Natural Language Queries include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc index 8c5388558..a2192a5fa 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/report-actions.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Report Actions include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc index 5b6f1084c..a68a8525a 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/rule-based-styling.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Rule-Based Styling include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc index 2b3750fe7..f94f8f52e 100644 --- a/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc +++ b/docs/modules/ROOT/pages/user-guide/extensions/workflows.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Workflows include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/faq.adoc b/docs/modules/ROOT/pages/user-guide/faq.adoc index 01b564245..4dfe5b7ce 100644 --- a/docs/modules/ROOT/pages/user-guide/faq.adoc +++ b/docs/modules/ROOT/pages/user-guide/faq.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = FAQ include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/index.adoc b/docs/modules/ROOT/pages/user-guide/index.adoc index 972291ebd..87cf337e9 100644 --- a/docs/modules/ROOT/pages/user-guide/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/index.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = User Guide include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/pages.adoc b/docs/modules/ROOT/pages/user-guide/pages.adoc index c946aaa46..d49807656 100644 --- a/docs/modules/ROOT/pages/user-guide/pages.adoc +++ b/docs/modules/ROOT/pages/user-guide/pages.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Pages include::../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/publishing.adoc b/docs/modules/ROOT/pages/user-guide/publishing.adoc index fb1904abe..40dab6fc0 100644 --- a/docs/modules/ROOT/pages/user-guide/publishing.adoc +++ b/docs/modules/ROOT/pages/user-guide/publishing.adoc @@ -1,5 +1,3 @@ -include::../banner.adoc[] - = Publishing include::/banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc index bf4f694a2..65e1f5e83 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/areamap.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Area Map include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc index 1ae087593..58cbd1763 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/bar-chart.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Bar Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc index 631c2ffe1..9d8ac8ca1 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/choropleth.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Choropleth include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc index 151e42aab..9b19d26a5 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/circle-packing.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Circle Packing include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/form.adoc b/docs/modules/ROOT/pages/user-guide/reports/form.adoc index 21c8a4955..3ca3823b3 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/form.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/form.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Form include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc index e0c524a45..ca141db70 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gantt.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Gantt Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc index a1459d73c..2db58ac39 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/gauge-chart.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Gauge Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc index 9677c08a2..0d3dd7ff0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Graph include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc index 89d18918b..f890c8032 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/graph3d.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = 3D Graph include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc index 71f7cfc45..86aed6cd0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/iframe.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = iFrame include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/index.adoc b/docs/modules/ROOT/pages/user-guide/reports/index.adoc index 8339822c5..e1d0dc083 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/index.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Reports include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc index 518a29829..0bf0fd5e1 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/line-chart.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Line Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/map.adoc b/docs/modules/ROOT/pages/user-guide/reports/map.adoc index 6cce8a35c..3d22d132d 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/map.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/map.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Map include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc index 726e96b52..dc7bd0260 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/markdown.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Markdown include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc index 06020887c..872ef4bc0 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/parameter-select.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Parameter Select include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc index 4bfe51d96..79f56848c 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/pie-chart.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Pie Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc index 040b24b34..ab2200fe8 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/radar.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/radar.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Radar Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc index e378f34ee..f97c1783b 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/raw-json.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Raw JSON include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc index 0117289d1..2b6374672 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sankey.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Sankey Chart include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc index b5d619774..e855df92f 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/single-value.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Single Value include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc index 97f4c2854..30a73fe61 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/sunburst.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Sunburst include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/table.adoc b/docs/modules/ROOT/pages/user-guide/reports/table.adoc index f91d62a78..675daa003 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/table.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/table.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Table include::../../banner.adoc[] diff --git a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc index 41f5c1113..23c96a69e 100644 --- a/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc +++ b/docs/modules/ROOT/pages/user-guide/reports/treemap.adoc @@ -1,5 +1,3 @@ -include::../../banner.adoc[] - = Treemap include::../../banner.adoc[]