From 953a8d4700b4ab6deb70d8de988637b13a6e7753 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:39:08 +0300 Subject: [PATCH] Implement frontend for schema versioning Also includes major rework for anonymous user UI --- rsconcept/backend/apps/rsform/models.py | 2 +- .../src/app/Navigation/NavigationButton.tsx | 6 +- .../src/components/Help/HelpRSFormMeta.tsx | 2 +- .../frontend/src/components/InfoError.tsx | 2 +- .../src/components/VersionSelector.tsx | 44 ++++++ .../frontend/src/components/ui/Button.tsx | 5 +- .../frontend/src/components/ui/Checkbox.tsx | 6 +- .../src/components/ui/CheckboxTristate.tsx | 5 +- .../src/components/ui/DropdownButton.tsx | 15 ++- .../frontend/src/components/ui/MiniButton.tsx | 15 ++- .../src/components/ui/SelectorButton.tsx | 5 +- .../frontend/src/components/ui/TabLabel.tsx | 6 +- .../frontend/src/context/RSFormContext.tsx | 14 +- .../DlgConstituentaTemplate/ArgumentsTab.tsx | 8 +- .../frontend/src/dialogs/DlgCreateVersion.tsx | 61 +++++++++ .../DlgEditVersions/DlgEditVersions.tsx | 114 ++++++++++++++++ .../dialogs/DlgEditVersions/VersionsTable.tsx | 102 ++++++++++++++ .../src/dialogs/DlgEditVersions/index.tsx | 1 + .../DlgEditWordForms/DlgEditWordForms.tsx | 4 +- .../DlgEditWordForms/WordFormsTable.tsx | 4 +- rsconcept/frontend/src/models/libraryAPI.ts | 15 +++ .../src/pages/LibraryPage/ViewLibrary.tsx | 4 +- rsconcept/frontend/src/pages/LoginPage.tsx | 2 +- .../frontend/src/pages/PasswordChangePage.tsx | 2 +- .../ConstituentaToolbar.tsx | 17 +-- .../EditorConstituenta/ControlsOverlay.tsx | 43 +++--- .../EditorConstituenta/EditorConstituenta.tsx | 31 +++-- .../EditorConstituenta/FormConstituenta.tsx | 28 ++-- .../EditorRSExpression/EditorRSExpression.tsx | 7 +- .../EditorRSExpression/ParsingResult.tsx | 2 +- .../RSFormPage/EditorRSForm/EditorRSForm.tsx | 9 +- .../RSFormPage/EditorRSForm/FormRSForm.tsx | 83 ++++++++---- .../RSFormPage/EditorRSForm/RSFormToolbar.tsx | 73 +++++----- .../RSFormPage/EditorRSList/EditorRSList.tsx | 24 ++-- .../RSFormPage/EditorRSList/RSListToolbar.tsx | 11 +- .../pages/RSFormPage/EditorRSList/RSTable.tsx | 5 +- .../EditorTermGraph/GraphToolbar.tsx | 31 +++-- .../src/pages/RSFormPage/RSEditContext.tsx | 85 +++++++++++- .../frontend/src/pages/RSFormPage/RSTabs.tsx | 20 ++- .../src/pages/RSFormPage/RSTabsMenu.tsx | 127 +++++++++--------- .../src/pages/RestorePasswordPage.tsx | 2 +- .../pages/UserProfilePage/EditorPassword.tsx | 2 +- .../UserProfilePage/ViewSubscriptions.tsx | 2 +- rsconcept/frontend/src/styling/styles.css | 22 ++- rsconcept/frontend/src/utils/backendAPI.ts | 27 ++-- rsconcept/frontend/src/utils/labels.ts | 10 +- 46 files changed, 830 insertions(+), 275 deletions(-) create mode 100644 rsconcept/frontend/src/components/VersionSelector.tsx create mode 100644 rsconcept/frontend/src/dialogs/DlgCreateVersion.tsx create mode 100644 rsconcept/frontend/src/dialogs/DlgEditVersions/DlgEditVersions.tsx create mode 100644 rsconcept/frontend/src/dialogs/DlgEditVersions/VersionsTable.tsx create mode 100644 rsconcept/frontend/src/dialogs/DlgEditVersions/index.tsx diff --git a/rsconcept/backend/apps/rsform/models.py b/rsconcept/backend/apps/rsform/models.py index ce3ff56f..ca0cec7e 100644 --- a/rsconcept/backend/apps/rsform/models.py +++ b/rsconcept/backend/apps/rsform/models.py @@ -130,7 +130,7 @@ class LibraryItem(Model): def versions(self) -> list['Version']: ''' Get all Versions of this item. ''' - return list(Version.objects.filter(item=self.pk)) + return list(Version.objects.filter(item=self.pk).order_by('-time_create')) @transaction.atomic def save(self, *args, **kwargs): diff --git a/rsconcept/frontend/src/app/Navigation/NavigationButton.tsx b/rsconcept/frontend/src/app/Navigation/NavigationButton.tsx index ff456885..bfb7c62a 100644 --- a/rsconcept/frontend/src/app/Navigation/NavigationButton.tsx +++ b/rsconcept/frontend/src/app/Navigation/NavigationButton.tsx @@ -6,15 +6,17 @@ interface NavigationButtonProps { text?: string; icon: React.ReactNode; title?: string; + titleHtml?: string; onClick?: () => void; } -function NavigationButton({ icon, title, onClick, text }: NavigationButtonProps) { +function NavigationButton({ icon, title, titleHtml, onClick, text }: NavigationButtonProps) { return (