From 9d79d22b293e57003c05d837116ffd9e2e55662f Mon Sep 17 00:00:00 2001 From: Sidney Alcantara Date: Wed, 4 May 2022 19:10:19 +1000 Subject: [PATCH] Merge branch 'v3' of https://github.com/notsidney/xtable into data-layer-rewrite --- .husky/pre-commit | 1 + .prettierignore | 1 + craco.config.js | 46 +- emulators/auth_export/accounts.json | 1 + emulators/auth_export/config.json | 1 + emulators/firebase-export-metadata.json | 12 + .../all_namespaces_all_kinds.export_metadata | Bin 0 -> 52 bytes .../all_namespaces/all_kinds/output-0 | Bin 0 -> 835 bytes .../firestore_export.overall_export_metadata | Bin 0 -> 95 bytes firebase.json | 21 + firestore.indexes.json | 4 + firestore.rules | 36 + package.json | 213 +- public/_redirects | 2 - public/browserconfig.xml | 9 - public/logo192.png | Bin 0 -> 5347 bytes public/logo512.png | Bin 0 -> 9664 bytes public/robots.txt | 1 + public/site.webmanifest | 34 +- public/static/meta.png | Bin 279026 -> 273920 bytes src/App.test.tsx | 9 - src/App.tsx | 294 +- src/Providers.tsx | 47 + src/analytics.ts | 11 +- src/assets/BrandedBackground.tsx | 15 +- src/assets/LogoRowyRun.tsx | 8 +- src/assets/favicon.svg | 5 + src/assets/icons/Firebase.tsx | 2 +- src/atoms/ContextMenu.ts | 40 - src/atoms/RowyRunModal.ts | 10 - src/atoms/Table.ts | 5 - src/atoms/globalScope/auth.ts | 8 + src/atoms/globalScope/index.ts | 9 + src/atoms/globalScope/project.ts | 94 + src/atoms/globalScope/rowyRun.ts | 134 + src/atoms/globalScope/ui.ts | 126 + src/atoms/globalScope/user.ts | 80 + src/atoms/tableScope/index.ts | 4 + src/atoms/tableScope/table.ts | 18 + src/components/AccessDenied.tsx | 93 + src/components/Auth/FirebaseUi.tsx | 286 - src/components/ButtonWithStatus.tsx | 65 - .../CodeEditor/{index.tsx => CodeEditor.tsx} | 0 .../CodeEditor/CodeEditorHelper.tsx | 7 +- src/components/CodeEditor/extensions.d.ts | 1 + src/components/CodeEditor/firebaseAuth.d.ts | 1 + .../CodeEditor/firebaseStorage.d.ts | 1 + src/components/CodeEditor/firestore.d.ts | 1 + src/components/CodeEditor/index.ts | 2 + .../CodeEditor/useMonacoCustomizations.ts | 210 +- src/components/CodeEditor/utils.d.ts | 1 + .../Dialog.tsx => ConfirmDialog.tsx} | 59 +- src/components/Confirmation.tsx | 128 - src/components/ConfirmationDialog/Context.ts | 8 - .../ConfirmationDialog/Provider.tsx | 39 - src/components/ConfirmationDialog/index.ts | 1 - src/components/ConfirmationDialog/props.ts | 27 - src/components/ErrorBoundary.tsx | 80 - src/components/ErrorFallback.tsx | 67 + src/components/FirebaseUi.tsx | 272 + src/components/FloatingSearch.tsx | 8 +- src/components/FormattedChip.tsx | 20 - src/components/HelperText.tsx | 21 - src/components/Home/AccessDenied.tsx | 56 - .../Home/TableGrid/TableGridSkeleton.tsx | 48 - .../Home/TableList/TableListSkeleton.tsx | 36 - src/components/InfoTooltip.tsx | 107 - src/components/KeyValueInput.tsx | 138 - src/components/Modal/FullScreenModal.tsx | 8 +- src/components/Modal/{index.tsx => Modal.tsx} | 14 +- src/components/Modal/SlideTransition.tsx | 9 +- src/components/Modal/index.ts | 2 + src/components/Navigation/Breadcrumbs.tsx | 172 - src/components/Navigation/NavTableSection.tsx | 78 - .../Navigation/Notifications/index.tsx | 112 - src/components/RenderedHtml.tsx | 107 - src/components/RenderedMarkdown.tsx | 8 +- src/components/RichTextEditor.tsx | 179 - src/components/RichTooltip.tsx | 186 - src/components/RowyRunModal.tsx | 39 +- src/components/SectionHeading.tsx | 6 +- .../Settings/ProjectSettings/About.tsx | 10 +- .../ProjectSettings/Authentication.tsx | 6 +- .../ProjectSettings/Customization.tsx | 11 +- .../Settings/ProjectSettings/RowyRun.tsx | 2 +- src/components/Settings/ThemeColorPicker.tsx | 2 +- .../Settings/UserManagement/InviteUser.tsx | 29 +- .../Settings/UserManagement/UserItem.tsx | 56 +- .../Settings/UserSettings/Account.tsx | 4 +- .../Settings/UserSettings/Personalization.tsx | 21 +- .../Settings/UserSettings/Theme.tsx | 26 +- src/components/Setup/SetupLayout.tsx | 6 +- .../Setup/{types.d.ts => SetupStep.d.ts} | 0 src/components/Setup/SignInWithGoogle.tsx | 13 +- src/components/Setup/Steps/StepFinish.tsx | 34 +- src/components/Setup/Steps/StepRules.tsx | 12 +- .../Setup/Steps/StepStorageRules.tsx | 12 +- src/components/Setup/Steps/StepWelcome.tsx | 10 +- src/components/SideDrawer/Form/Autosave.tsx | 73 - .../SideDrawer/Form/FieldSkeleton.tsx | 14 - .../SideDrawer/Form/FieldWrapper.tsx | 111 - src/components/SideDrawer/Form/Label.tsx | 40 - src/components/SideDrawer/Form/Reset.tsx | 50 - src/components/SideDrawer/Form/index.tsx | 171 - src/components/SideDrawer/Form/utils.ts | 56 - src/components/SideDrawer/index.tsx | 163 - src/components/SideDrawer/useStyles.ts | 122 - src/components/SnackbarProgress.tsx | 44 - src/components/Table/BulkActions/index.tsx | 338 - src/components/Table/CellValidation.tsx | 98 - src/components/Table/ColumnHeader.tsx | 322 - .../FieldSettings/DefaultValueInput.tsx | 212 - .../ColumnMenu/FieldSettings/FormAutosave.tsx | 29 - .../FieldSettings/defaultValue.d.ts | 8 - .../Table/ColumnMenu/FieldSettings/index.tsx | 202 - .../Table/ColumnMenu/FieldsDropdown.tsx | 82 - .../Table/ColumnMenu/MenuContents.tsx | 51 - .../Table/ColumnMenu/NameChange.tsx | 53 - src/components/Table/ColumnMenu/NewColumn.tsx | 176 - .../Table/ColumnMenu/Subheading.tsx | 19 - .../Table/ColumnMenu/TypeChange.tsx | 39 - src/components/Table/ColumnMenu/index.tsx | 371 - .../Table/ContextMenu/MenuContent.tsx | 52 - src/components/Table/ContextMenu/MenuItem.tsx | 36 - src/components/Table/ContextMenu/index.tsx | 107 - src/components/Table/EmptyTable.tsx | 143 - src/components/Table/FinalColumnHeader.tsx | 37 - src/components/Table/HotKeys.tsx | 103 - src/components/Table/OutOfOrderIndicator.tsx | 59 - .../Table/Skeleton/TableHeaderSkeleton.tsx | 15 +- src/components/Table/TableContainer.tsx | 228 - src/components/Table/TableRow.tsx | 24 - src/components/Table/editors/NullEditor.tsx | 26 - src/components/Table/editors/TextEditor.tsx | 113 - src/components/Table/editors/styles.ts | 9 - .../Table/editors/withNullEditor.tsx | 45 - .../Table/editors/withSideDrawerEditor.tsx | 53 - src/components/Table/formatters/ChipList.tsx | 37 - .../Table/formatters/FinalColumn.tsx | 108 - src/components/Table/index.tsx | 287 - src/components/TableHeader/AddRow.tsx | 151 - .../CloudLogs/BuildLogs/BuildLogList.tsx | 107 - .../CloudLogs/BuildLogs/BuildLogRow.tsx | 68 - .../CloudLogs/BuildLogs/BuildLogsSnack.tsx | 182 - .../TableHeader/CloudLogs/BuildLogs/index.tsx | 206 - .../CloudLogs/BuildLogs/useBuildLogs.ts | 26 - .../TableHeader/CloudLogs/CloudLogItem.tsx | 257 - .../TableHeader/CloudLogs/CloudLogList.tsx | 86 - .../CloudLogs/CloudLogSeverityIcon.tsx | 100 - .../CloudLogs/CloudLogSubheader.tsx | 21 - .../TableHeader/CloudLogs/CloudLogsModal.tsx | 328 - .../TableHeader/CloudLogs/TimeRangeSelect.tsx | 96 - .../TableHeader/CloudLogs/index.tsx | 36 - src/components/TableHeader/CloudLogs/utils.ts | 103 - .../TableHeader/Export/Download.tsx | 212 - src/components/TableHeader/Export/Export.tsx | 224 - src/components/TableHeader/Export/index.tsx | 148 - .../Extensions/AddExtensionButton.tsx | 83 - .../TableHeader/Extensions/ExtensionList.tsx | 156 - .../Extensions/ExtensionMigration.tsx | 149 - .../TableHeader/Extensions/ExtensionModal.tsx | 188 - .../TableHeader/Extensions/Step1Triggers.tsx | 105 - .../Extensions/Step2RequiredFields.tsx | 66 - .../Extensions/Step3Conditions.tsx | 85 - .../TableHeader/Extensions/Step4Body.tsx | 85 - .../TableHeader/Extensions/index.tsx | 274 - .../TableHeader/Extensions/utils.ts | 255 - .../TableHeader/Filters/FilterInputs.tsx | 115 - .../TableHeader/Filters/FiltersPopover.tsx | 106 - src/components/TableHeader/Filters/index.tsx | 442 - .../TableHeader/Filters/useFilterInputs.ts | 52 - src/components/TableHeader/HiddenFields.tsx | 152 - src/components/TableHeader/ImportCsv.tsx | 379 - .../TableHeader/LoadedRowsStatus.tsx | 48 - src/components/TableHeader/ReExecute.tsx | 88 - src/components/TableHeader/RowHeight.tsx | 65 - .../TableHeader/TableHeaderButton.tsx | 30 - src/components/TableHeader/TableSettings.tsx | 36 - .../TableHeader/Webhooks/AddWebhookButton.tsx | 83 - .../TableHeader/Webhooks/Schemas/basic.tsx | 99 - .../TableHeader/Webhooks/Schemas/index.ts | 6 - .../TableHeader/Webhooks/Schemas/sendgrid.tsx | 72 - .../TableHeader/Webhooks/Schemas/typeform.tsx | 109 - .../TableHeader/Webhooks/Schemas/webform.tsx | 93 - .../TableHeader/Webhooks/Step1Auth.tsx | 45 - .../TableHeader/Webhooks/Step2Conditions.tsx | 67 - .../TableHeader/Webhooks/Step3Parser.tsx | 85 - .../TableHeader/Webhooks/WebhookList.tsx | 190 - .../TableHeader/Webhooks/WebhookModal.tsx | 225 - src/components/TableHeader/Webhooks/index.tsx | 251 - src/components/TableHeader/Webhooks/utils.tsx | 100 - .../TableHeader/Webhooks/webhooks.d.ts | 11 - src/components/TableHeader/index.tsx | 93 - src/components/TableSettings/DeleteMenu.tsx | 141 - .../ActionsMenu/ActionsMenu.tsx} | 11 +- .../ActionsMenu/ExportSettings.tsx | 17 +- .../ActionsMenu/ImportSettings.tsx | 32 +- .../TableSettingsDialog/ActionsMenu/index.ts | 2 + .../TableSettingsDialog/DeleteMenu.tsx | 140 + .../SuggestedRules.tsx | 5 +- .../TableId.tsx | 4 +- .../TableName.tsx | 4 +- .../TableSettingsDialog.tsx} | 156 +- .../form.tsx | 42 +- src/components/TableSettingsDialog/index.ts | 2 + .../{Home => Tables}/HomeWelcomePrompt.tsx | 0 .../{Home => Tables}/TableGrid/TableCard.tsx | 4 +- .../TableGrid/TableCardSkeleton.tsx | 0 .../TableGrid/TableGrid.tsx} | 8 +- src/components/Tables/TableGrid/index.ts | 2 + .../TableList/TableList.tsx} | 8 +- .../TableList/TableListItem.tsx | 4 +- .../TableList/TableListItemSkeleton.tsx | 0 src/components/Tables/TableList/index.ts | 2 + src/components/Thumbnail.tsx | 130 - src/components/Wizards/Cell.tsx | 103 - src/components/Wizards/Column.tsx | 113 - .../Wizards/ImportCsvWizard/Step1Columns.tsx | 301 - .../ImportCsvWizard/Step2NewColumns.tsx | 177 - .../Wizards/ImportCsvWizard/Step3Preview.tsx | 103 - .../Wizards/ImportCsvWizard/index.tsx | 191 - .../Wizards/ImportWizard/Step1Columns.tsx | 213 - .../Wizards/ImportWizard/Step2Rename.tsx | 141 - .../Wizards/ImportWizard/Step3Types.tsx | 155 - .../Wizards/ImportWizard/Step4Preview.tsx | 85 - src/components/Wizards/ImportWizard/index.tsx | 133 - src/components/Wizards/ImportWizard/utils.ts | 95 - src/components/Wizards/ScrollableList.tsx | 71 - src/components/Wizards/WizardDialog.tsx | 176 - src/components/fields/Action/ActionFab.tsx | 179 - src/components/fields/Action/BasicCell.tsx | 5 - .../fields/Action/FormDialog/Context.ts | 8 - .../fields/Action/FormDialog/Dialog.tsx | 19 - .../fields/Action/FormDialog/Provider.tsx | 39 - .../fields/Action/FormDialog/index.ts | 1 - .../fields/Action/FormDialog/props.ts | 19 - .../fields/Action/FormFieldSnippets.tsx | 122 - src/components/fields/Action/Settings.tsx | 596 - .../fields/Action/SideDrawerField.tsx | 72 - src/components/fields/Action/TableCell.tsx | 45 - src/components/fields/Action/action.d.ts | 26 - src/components/fields/Action/index.tsx | 35 - src/components/fields/Action/templates.ts | 54 - src/components/fields/Aggregate/Settings.tsx | 75 - src/components/fields/Aggregate/index.tsx | 22 - .../fields/Checkbox/SideDrawerField.tsx | 60 - src/components/fields/Checkbox/TableCell.tsx | 67 - src/components/fields/Checkbox/index.tsx | 46 - src/components/fields/Code/BasicCell.tsx | 24 - src/components/fields/Code/Settings.tsx | 38 - .../fields/Code/SideDrawerField.tsx | 25 - src/components/fields/Code/index.tsx | 32 - src/components/fields/Color/InlineCell.tsx | 41 - src/components/fields/Color/PopoverCell.tsx | 24 - .../fields/Color/SideDrawerField.tsx | 86 - src/components/fields/Color/index.tsx | 34 - .../ConnectServiceSelect/PopupContents.tsx | 202 - .../ConnectServiceSelect/index.tsx | 76 - .../ConnectServiceSelect/styles.ts | 83 - .../fields/ConnectService/InlineCell.tsx | 56 - .../fields/ConnectService/PopoverCell.tsx | 38 - .../fields/ConnectService/Settings.tsx | 75 - .../fields/ConnectService/SideDrawerField.tsx | 73 - .../fields/ConnectService/index.tsx | 42 - src/components/fields/ConnectService/utils.ts | 4 - .../ConnectTable/ConnectTableSelect.tsx | 327 - .../fields/ConnectTable/InlineCell.tsx | 68 - .../fields/ConnectTable/PopoverCell.tsx | 40 - .../fields/ConnectTable/Settings.tsx | 195 - .../fields/ConnectTable/SideDrawerField.tsx | 78 - src/components/fields/ConnectTable/index.tsx | 43 - src/components/fields/ConnectTable/utils.ts | 4 - .../fields/Connector/InlineCell.tsx | 57 - .../fields/Connector/PopoverCell.tsx | 35 - .../fields/Connector/Select/PopupContents.tsx | 207 - .../fields/Connector/Select/index.tsx | 72 - .../fields/Connector/Select/styles.ts | 83 - src/components/fields/Connector/Settings.tsx | 147 - .../fields/Connector/SideDrawerField.tsx | 74 - .../fields/Connector/connector.d.ts | 22 - src/components/fields/Connector/index.tsx | 42 - src/components/fields/Connector/types.d.ts | 5 - src/components/fields/Connector/utils.ts | 21 - .../fields/CreatedAt/SideDrawerField.tsx | 34 - src/components/fields/CreatedAt/TableCell.tsx | 20 - src/components/fields/CreatedAt/index.tsx | 36 - src/components/fields/CreatedBy/Settings.tsx | 46 - .../fields/CreatedBy/SideDrawerField.tsx | 52 - src/components/fields/CreatedBy/TableCell.tsx | 31 - src/components/fields/CreatedBy/index.tsx | 37 - src/components/fields/Date/BasicCell.tsx | 26 - src/components/fields/Date/Filter.tsx | 35 - src/components/fields/Date/Settings.tsx | 40 - .../fields/Date/SideDrawerField.tsx | 68 - src/components/fields/Date/TableCell.tsx | 116 - src/components/fields/Date/index.tsx | 47 - src/components/fields/Date/utils.ts | 11 - src/components/fields/DateTime/BasicCell.tsx | 26 - src/components/fields/DateTime/Filter.tsx | 35 - src/components/fields/DateTime/Settings.tsx | 46 - .../fields/DateTime/SideDrawerField.tsx | 68 - src/components/fields/DateTime/TableCell.tsx | 117 - src/components/fields/DateTime/index.tsx | 48 - .../fields/Derivative/ContextMenuActions.tsx | 73 - src/components/fields/Derivative/Settings.tsx | 156 - .../fields/Derivative/derivative.d.ts | 10 - src/components/fields/Derivative/index.tsx | 27 - .../fields/Duration/SideDrawerField.tsx | 32 - src/components/fields/Duration/TableCell.tsx | 16 - src/components/fields/Duration/index.tsx | 31 - src/components/fields/Duration/utils.ts | 12 - .../fields/Email/SideDrawerField.tsx | 37 - src/components/fields/Email/index.tsx | 33 - .../fields/File/SideDrawerField.tsx | 181 - src/components/fields/File/TableCell.tsx | 192 - src/components/fields/File/index.tsx | 32 - src/components/fields/Id/SideDrawerField.tsx | 18 - src/components/fields/Id/TableCell.tsx | 19 - src/components/fields/Id/index.tsx | 28 - .../fields/Image/SideDrawerField.tsx | 280 - src/components/fields/Image/TableCell.tsx | 288 - src/components/fields/Image/index.tsx | 40 - src/components/fields/Json/BasicCell.tsx | 29 - src/components/fields/Json/Settings.tsx | 27 - .../fields/Json/SideDrawerField.tsx | 147 - src/components/fields/Json/index.tsx | 39 - src/components/fields/LongText/BasicCell.tsx | 22 - .../fields/LongText/SideDrawerField.tsx | 36 - src/components/fields/LongText/index.tsx | 35 - .../MultiSelect/ConvertStringToArray.tsx | 25 - src/components/fields/MultiSelect/Filter.ts | 20 - .../fields/MultiSelect/InlineCell.tsx | 61 - .../fields/MultiSelect/PopoverCell.tsx | 41 - .../fields/MultiSelect/SideDrawerField.tsx | 69 - src/components/fields/MultiSelect/index.tsx | 55 - src/components/fields/MultiSelect/utils.ts | 4 - src/components/fields/Number/BasicCell.tsx | 5 - src/components/fields/Number/Filter.tsx | 28 - .../fields/Number/SideDrawerField.tsx | 36 - src/components/fields/Number/index.tsx | 40 - .../fields/Percentage/BasicCell.tsx | 41 - .../fields/Percentage/SideDrawerField.tsx | 70 - src/components/fields/Percentage/index.tsx | 42 - .../fields/Phone/SideDrawerField.tsx | 38 - src/components/fields/Phone/index.tsx | 33 - src/components/fields/Rating/Settings.tsx | 41 - .../fields/Rating/SideDrawerField.tsx | 52 - src/components/fields/Rating/TableCell.tsx | 39 - src/components/fields/Rating/index.tsx | 40 - .../fields/RichText/SideDrawerField.tsx | 24 - src/components/fields/RichText/TableCell.tsx | 84 - src/components/fields/RichText/index.tsx | 34 - src/components/fields/ShortText/Filter.tsx | 12 - src/components/fields/ShortText/Settings.tsx | 30 - .../fields/ShortText/SideDrawerField.tsx | 34 - src/components/fields/ShortText/index.tsx | 39 - .../fields/SingleSelect/InlineCell.tsx | 51 - .../fields/SingleSelect/PopoverCell.tsx | 41 - .../fields/SingleSelect/Settings.tsx | 131 - .../fields/SingleSelect/SideDrawerField.tsx | 38 - src/components/fields/SingleSelect/index.tsx | 45 - src/components/fields/SingleSelect/utils.ts | 5 - src/components/fields/Slider/Settings.tsx | 54 - .../fields/Slider/SideDrawerField.tsx | 82 - src/components/fields/Slider/TableCell.tsx | 58 - src/components/fields/Slider/index.tsx | 39 - .../fields/Status/ConditionList.tsx | 65 - .../fields/Status/ConditionModal.tsx | 98 - .../fields/Status/ConditionModalContent.tsx | 84 - src/components/fields/Status/Filter.tsx | 12 - src/components/fields/Status/InlineCell.tsx | 71 - src/components/fields/Status/PopoverCell.tsx | 48 - src/components/fields/Status/Settings.tsx | 50 - .../fields/Status/SideDrawerField.tsx | 37 - src/components/fields/Status/index.tsx | 41 - src/components/fields/Status/styles.ts | 8 - .../Status/utils/conditionListHelper.ts | 12 - .../fields/Status/utils/getLabelHelper.ts | 72 - src/components/fields/SubTable/Settings.tsx | 29 - .../fields/SubTable/SideDrawerField.tsx | 43 - src/components/fields/SubTable/TableCell.tsx | 42 - src/components/fields/SubTable/index.tsx | 37 - src/components/fields/SubTable/utils.ts | 38 - .../fields/UpdatedAt/SideDrawerField.tsx | 34 - src/components/fields/UpdatedAt/TableCell.tsx | 20 - src/components/fields/UpdatedAt/index.tsx | 37 - .../fields/UpdatedBy/SideDrawerField.tsx | 59 - src/components/fields/UpdatedBy/TableCell.tsx | 45 - src/components/fields/UpdatedBy/index.tsx | 38 - src/components/fields/Url/SideDrawerField.tsx | 53 - src/components/fields/Url/TableCell.tsx | 33 - src/components/fields/Url/index.tsx | 33 - .../fields/User/SideDrawerField.tsx | 58 - src/components/fields/User/TableCell.tsx | 30 - src/components/fields/User/index.tsx | 35 - .../BasicCellContextMenuActions.tsx | 90 - .../fields/_BasicCell/BasicCellName.tsx | 5 - .../fields/_BasicCell/BasicCellNull.tsx | 3 - .../fields/_BasicCell/BasicCellValue.tsx | 6 - .../fields/_withTableCell/withBasicCell.tsx | 39 - .../fields/_withTableCell/withHeavyCell.tsx | 99 - .../fields/_withTableCell/withPopoverCell.tsx | 197 - src/components/fields/index.tsx | 134 - src/components/fields/types.ts | 85 - src/{firebase => config}/firebaseui.ts | 21 +- src/constants/externalLinks.ts | 4 +- src/constants/routes.ts | 26 - src/constants/routes.tsx | 61 + src/contexts/AppContext.tsx | 211 - src/contexts/EditorContext.ts | 30 - src/contexts/ProjectContext.tsx | 438 - src/contexts/SnackLogContext.tsx | 49 - src/contexts/SnackbarContext.tsx | 116 +- src/contexts/SwrContext.tsx | 22 - src/firebase/config.ts | 8 - src/firebase/index.ts | 43 - src/hooks/useBasicSearch.ts | 6 +- src/hooks/useCollection.ts | 141 - src/hooks/useCombinedRefs.ts | 43 - src/hooks/useDoc.ts | 102 - src/hooks/useDocumentTitle.ts | 34 +- src/hooks/useFirestoreCollectionWithAtom.ts | 159 + src/hooks/useFirestoreDocWithAtom.ts | 135 + src/hooks/useHotkeys.ts | 23 - src/hooks/useKeyPress.ts | 33 - src/hooks/useRouter.ts | 9 - src/hooks/useSettings.ts | 145 - src/hooks/useTable/index.ts | 116 - src/hooks/useTable/useTableConfig.ts | 232 - src/hooks/useTable/useTableData.tsx | 431 - src/hooks/useTable/useUploader.tsx | 170 - src/hooks/useUpdateCheck.ts | 47 +- src/hooks/useWindowSize.ts | 28 - src/index.tsx | 25 +- .../Auth => layouts}/AuthLayout.tsx | 12 +- .../MarketingPanel.tsx} | 2 +- src/layouts/Nav.tsx | 13 + .../Navigation/NavDrawer.tsx | 98 +- .../Navigation/NavItem.tsx | 2 +- src/layouts/Navigation/NavTableSection.tsx | 75 + .../Navigation/Navigation.tsx} | 79 +- .../Navigation/UpdateCheckBadge.tsx | 0 .../Navigation/UserMenu.tsx | 44 +- src/layouts/Navigation/index.ts | 2 + src/layouts/RequireAuth.tsx | 32 + src/pages/Auth/ImpersonatorAuth.tsx | 35 +- src/pages/Auth/JwtAuth.tsx | 11 +- src/pages/Auth/SetupGuide.tsx | 31 - src/pages/Auth/SignOut.tsx | 14 +- src/pages/Auth/SignUp.tsx | 26 +- src/pages/Auth/index.tsx | 15 +- src/pages/JotaiTest.tsx | 117 + src/pages/NotFound.tsx | 53 + src/pages/PageNotFound.tsx | 53 - src/pages/RowyRunTest.tsx | 249 - src/pages/Settings/ProjectSettings.tsx | 123 +- src/pages/Settings/UserManagement.tsx | 110 +- src/pages/Settings/UserSettings.tsx | 51 +- src/pages/Table.tsx | 96 - src/pages/TableTest.tsx | 49 + src/pages/{Home.tsx => Tables.tsx} | 142 +- src/pages/Test.tsx | 1025 - src/reportWebVitals.ts | 15 + src/serviceWorker.ts | 143 - src/sources/ProjectSourceFirebase.tsx | 168 + src/sources/RowyProject.tsx | 35 + src/sources/TableSourceFirestore.tsx | 54 + src/sources/UserManagementSourceFirebase.tsx | 21 + src/space-grotesk.css | 15 - src/test/App.test.tsx | 24 + src/test/custom-jest-env.js | 33 + src/test/setupTests.ts | 5 + src/test/testUtils.tsx | 67 + src/theme/RowyThemeProvider.tsx | 61 + src/theme/index.ts | 2 + src/theme/{index.tsx => themes.ts} | 10 +- types/custom.ts => src/types/files.d.ts | 0 ...json-stable-stringify-without-jsonify.d.ts | 4 + .../types/react-element-scroll-hook.d.ts | 0 src/types/table.d.ts | 61 + src/utils/CustomBrowserRouter.tsx | 22 - src/utils/PrivateRoute.tsx | 37 - src/utils/auth.ts | 30 - src/utils/color.ts | 14 - src/utils/fns.ts | 203 - src/utils/rowyRun.ts | 44 - storage.rules | 8 + tsconfig.json | 27 +- types/@mui/styles.ts | 5 - yarn.lock | 18158 ++++++---------- 490 files changed, 10220 insertions(+), 42950 deletions(-) create mode 100755 .husky/pre-commit create mode 100644 emulators/auth_export/accounts.json create mode 100644 emulators/auth_export/config.json create mode 100644 emulators/firebase-export-metadata.json create mode 100644 emulators/firestore_export/all_namespaces/all_kinds/all_namespaces_all_kinds.export_metadata create mode 100644 emulators/firestore_export/all_namespaces/all_kinds/output-0 create mode 100644 emulators/firestore_export/firestore_export.overall_export_metadata create mode 100644 firestore.indexes.json create mode 100644 firestore.rules delete mode 100644 public/_redirects delete mode 100644 public/browserconfig.xml create mode 100644 public/logo192.png create mode 100644 public/logo512.png delete mode 100644 src/App.test.tsx create mode 100644 src/Providers.tsx create mode 100644 src/assets/favicon.svg delete mode 100644 src/atoms/ContextMenu.ts delete mode 100644 src/atoms/RowyRunModal.ts delete mode 100644 src/atoms/Table.ts create mode 100644 src/atoms/globalScope/auth.ts create mode 100644 src/atoms/globalScope/index.ts create mode 100644 src/atoms/globalScope/project.ts create mode 100644 src/atoms/globalScope/rowyRun.ts create mode 100644 src/atoms/globalScope/ui.ts create mode 100644 src/atoms/globalScope/user.ts create mode 100644 src/atoms/tableScope/index.ts create mode 100644 src/atoms/tableScope/table.ts create mode 100644 src/components/AccessDenied.tsx delete mode 100644 src/components/Auth/FirebaseUi.tsx delete mode 100644 src/components/ButtonWithStatus.tsx rename src/components/CodeEditor/{index.tsx => CodeEditor.tsx} (100%) create mode 100644 src/components/CodeEditor/index.ts rename src/components/{ConfirmationDialog/Dialog.tsx => ConfirmDialog.tsx} (63%) delete mode 100644 src/components/Confirmation.tsx delete mode 100644 src/components/ConfirmationDialog/Context.ts delete mode 100644 src/components/ConfirmationDialog/Provider.tsx delete mode 100644 src/components/ConfirmationDialog/index.ts delete mode 100644 src/components/ConfirmationDialog/props.ts delete mode 100644 src/components/ErrorBoundary.tsx create mode 100644 src/components/ErrorFallback.tsx create mode 100644 src/components/FirebaseUi.tsx delete mode 100644 src/components/FormattedChip.tsx delete mode 100644 src/components/HelperText.tsx delete mode 100644 src/components/Home/AccessDenied.tsx delete mode 100644 src/components/Home/TableGrid/TableGridSkeleton.tsx delete mode 100644 src/components/Home/TableList/TableListSkeleton.tsx delete mode 100644 src/components/InfoTooltip.tsx delete mode 100644 src/components/KeyValueInput.tsx rename src/components/Modal/{index.tsx => Modal.tsx} (93%) create mode 100644 src/components/Modal/index.ts delete mode 100644 src/components/Navigation/Breadcrumbs.tsx delete mode 100644 src/components/Navigation/NavTableSection.tsx delete mode 100644 src/components/Navigation/Notifications/index.tsx delete mode 100644 src/components/RenderedHtml.tsx delete mode 100644 src/components/RichTextEditor.tsx delete mode 100644 src/components/RichTooltip.tsx rename src/components/Setup/{types.d.ts => SetupStep.d.ts} (100%) delete mode 100644 src/components/SideDrawer/Form/Autosave.tsx delete mode 100644 src/components/SideDrawer/Form/FieldSkeleton.tsx delete mode 100644 src/components/SideDrawer/Form/FieldWrapper.tsx delete mode 100644 src/components/SideDrawer/Form/Label.tsx delete mode 100644 src/components/SideDrawer/Form/Reset.tsx delete mode 100644 src/components/SideDrawer/Form/index.tsx delete mode 100644 src/components/SideDrawer/Form/utils.ts delete mode 100644 src/components/SideDrawer/index.tsx delete mode 100644 src/components/SideDrawer/useStyles.ts delete mode 100644 src/components/SnackbarProgress.tsx delete mode 100644 src/components/Table/BulkActions/index.tsx delete mode 100644 src/components/Table/CellValidation.tsx delete mode 100644 src/components/Table/ColumnHeader.tsx delete mode 100644 src/components/Table/ColumnMenu/FieldSettings/DefaultValueInput.tsx delete mode 100644 src/components/Table/ColumnMenu/FieldSettings/FormAutosave.tsx delete mode 100644 src/components/Table/ColumnMenu/FieldSettings/defaultValue.d.ts delete mode 100644 src/components/Table/ColumnMenu/FieldSettings/index.tsx delete mode 100644 src/components/Table/ColumnMenu/FieldsDropdown.tsx delete mode 100644 src/components/Table/ColumnMenu/MenuContents.tsx delete mode 100644 src/components/Table/ColumnMenu/NameChange.tsx delete mode 100644 src/components/Table/ColumnMenu/NewColumn.tsx delete mode 100644 src/components/Table/ColumnMenu/Subheading.tsx delete mode 100644 src/components/Table/ColumnMenu/TypeChange.tsx delete mode 100644 src/components/Table/ColumnMenu/index.tsx delete mode 100644 src/components/Table/ContextMenu/MenuContent.tsx delete mode 100644 src/components/Table/ContextMenu/MenuItem.tsx delete mode 100644 src/components/Table/ContextMenu/index.tsx delete mode 100644 src/components/Table/EmptyTable.tsx delete mode 100644 src/components/Table/FinalColumnHeader.tsx delete mode 100644 src/components/Table/HotKeys.tsx delete mode 100644 src/components/Table/OutOfOrderIndicator.tsx delete mode 100644 src/components/Table/TableContainer.tsx delete mode 100644 src/components/Table/TableRow.tsx delete mode 100644 src/components/Table/editors/NullEditor.tsx delete mode 100644 src/components/Table/editors/TextEditor.tsx delete mode 100644 src/components/Table/editors/styles.ts delete mode 100644 src/components/Table/editors/withNullEditor.tsx delete mode 100644 src/components/Table/editors/withSideDrawerEditor.tsx delete mode 100644 src/components/Table/formatters/ChipList.tsx delete mode 100644 src/components/Table/formatters/FinalColumn.tsx delete mode 100644 src/components/Table/index.tsx delete mode 100644 src/components/TableHeader/AddRow.tsx delete mode 100644 src/components/TableHeader/CloudLogs/BuildLogs/BuildLogList.tsx delete mode 100644 src/components/TableHeader/CloudLogs/BuildLogs/BuildLogRow.tsx delete mode 100644 src/components/TableHeader/CloudLogs/BuildLogs/BuildLogsSnack.tsx delete mode 100644 src/components/TableHeader/CloudLogs/BuildLogs/index.tsx delete mode 100644 src/components/TableHeader/CloudLogs/BuildLogs/useBuildLogs.ts delete mode 100644 src/components/TableHeader/CloudLogs/CloudLogItem.tsx delete mode 100644 src/components/TableHeader/CloudLogs/CloudLogList.tsx delete mode 100644 src/components/TableHeader/CloudLogs/CloudLogSeverityIcon.tsx delete mode 100644 src/components/TableHeader/CloudLogs/CloudLogSubheader.tsx delete mode 100644 src/components/TableHeader/CloudLogs/CloudLogsModal.tsx delete mode 100644 src/components/TableHeader/CloudLogs/TimeRangeSelect.tsx delete mode 100644 src/components/TableHeader/CloudLogs/index.tsx delete mode 100644 src/components/TableHeader/CloudLogs/utils.ts delete mode 100644 src/components/TableHeader/Export/Download.tsx delete mode 100644 src/components/TableHeader/Export/Export.tsx delete mode 100644 src/components/TableHeader/Export/index.tsx delete mode 100644 src/components/TableHeader/Extensions/AddExtensionButton.tsx delete mode 100644 src/components/TableHeader/Extensions/ExtensionList.tsx delete mode 100644 src/components/TableHeader/Extensions/ExtensionMigration.tsx delete mode 100644 src/components/TableHeader/Extensions/ExtensionModal.tsx delete mode 100644 src/components/TableHeader/Extensions/Step1Triggers.tsx delete mode 100644 src/components/TableHeader/Extensions/Step2RequiredFields.tsx delete mode 100644 src/components/TableHeader/Extensions/Step3Conditions.tsx delete mode 100644 src/components/TableHeader/Extensions/Step4Body.tsx delete mode 100644 src/components/TableHeader/Extensions/index.tsx delete mode 100644 src/components/TableHeader/Extensions/utils.ts delete mode 100644 src/components/TableHeader/Filters/FilterInputs.tsx delete mode 100644 src/components/TableHeader/Filters/FiltersPopover.tsx delete mode 100644 src/components/TableHeader/Filters/index.tsx delete mode 100644 src/components/TableHeader/Filters/useFilterInputs.ts delete mode 100644 src/components/TableHeader/HiddenFields.tsx delete mode 100644 src/components/TableHeader/ImportCsv.tsx delete mode 100644 src/components/TableHeader/LoadedRowsStatus.tsx delete mode 100644 src/components/TableHeader/ReExecute.tsx delete mode 100644 src/components/TableHeader/RowHeight.tsx delete mode 100644 src/components/TableHeader/TableHeaderButton.tsx delete mode 100644 src/components/TableHeader/TableSettings.tsx delete mode 100644 src/components/TableHeader/Webhooks/AddWebhookButton.tsx delete mode 100644 src/components/TableHeader/Webhooks/Schemas/basic.tsx delete mode 100644 src/components/TableHeader/Webhooks/Schemas/index.ts delete mode 100644 src/components/TableHeader/Webhooks/Schemas/sendgrid.tsx delete mode 100644 src/components/TableHeader/Webhooks/Schemas/typeform.tsx delete mode 100644 src/components/TableHeader/Webhooks/Schemas/webform.tsx delete mode 100644 src/components/TableHeader/Webhooks/Step1Auth.tsx delete mode 100644 src/components/TableHeader/Webhooks/Step2Conditions.tsx delete mode 100644 src/components/TableHeader/Webhooks/Step3Parser.tsx delete mode 100644 src/components/TableHeader/Webhooks/WebhookList.tsx delete mode 100644 src/components/TableHeader/Webhooks/WebhookModal.tsx delete mode 100644 src/components/TableHeader/Webhooks/index.tsx delete mode 100644 src/components/TableHeader/Webhooks/utils.tsx delete mode 100644 src/components/TableHeader/Webhooks/webhooks.d.ts delete mode 100644 src/components/TableHeader/index.tsx delete mode 100644 src/components/TableSettings/DeleteMenu.tsx rename src/components/{TableSettings/ActionsMenu/index.tsx => TableSettingsDialog/ActionsMenu/ActionsMenu.tsx} (88%) rename src/components/{TableSettings => TableSettingsDialog}/ActionsMenu/ExportSettings.tsx (87%) rename src/components/{TableSettings => TableSettingsDialog}/ActionsMenu/ImportSettings.tsx (86%) create mode 100644 src/components/TableSettingsDialog/ActionsMenu/index.ts create mode 100644 src/components/TableSettingsDialog/DeleteMenu.tsx rename src/components/{TableSettings => TableSettingsDialog}/SuggestedRules.tsx (96%) rename src/components/{TableSettings => TableSettingsDialog}/TableId.tsx (89%) rename src/components/{TableSettings => TableSettingsDialog}/TableName.tsx (88%) rename src/components/{TableSettings/index.tsx => TableSettingsDialog/TableSettingsDialog.tsx} (79%) rename src/components/{TableSettings => TableSettingsDialog}/form.tsx (92%) create mode 100644 src/components/TableSettingsDialog/index.ts rename src/components/{Home => Tables}/HomeWelcomePrompt.tsx (100%) rename src/components/{Home => Tables}/TableGrid/TableCard.tsx (94%) rename src/components/{Home => Tables}/TableGrid/TableCardSkeleton.tsx (100%) rename src/components/{Home/TableGrid/index.tsx => Tables/TableGrid/TableGrid.tsx} (91%) create mode 100644 src/components/Tables/TableGrid/index.ts rename src/components/{Home/TableList/index.tsx => Tables/TableList/TableList.tsx} (90%) rename src/components/{Home => Tables}/TableList/TableListItem.tsx (93%) rename src/components/{Home => Tables}/TableList/TableListItemSkeleton.tsx (100%) create mode 100644 src/components/Tables/TableList/index.ts delete mode 100644 src/components/Thumbnail.tsx delete mode 100644 src/components/Wizards/Cell.tsx delete mode 100644 src/components/Wizards/Column.tsx delete mode 100644 src/components/Wizards/ImportCsvWizard/Step1Columns.tsx delete mode 100644 src/components/Wizards/ImportCsvWizard/Step2NewColumns.tsx delete mode 100644 src/components/Wizards/ImportCsvWizard/Step3Preview.tsx delete mode 100644 src/components/Wizards/ImportCsvWizard/index.tsx delete mode 100644 src/components/Wizards/ImportWizard/Step1Columns.tsx delete mode 100644 src/components/Wizards/ImportWizard/Step2Rename.tsx delete mode 100644 src/components/Wizards/ImportWizard/Step3Types.tsx delete mode 100644 src/components/Wizards/ImportWizard/Step4Preview.tsx delete mode 100644 src/components/Wizards/ImportWizard/index.tsx delete mode 100644 src/components/Wizards/ImportWizard/utils.ts delete mode 100644 src/components/Wizards/ScrollableList.tsx delete mode 100644 src/components/Wizards/WizardDialog.tsx delete mode 100644 src/components/fields/Action/ActionFab.tsx delete mode 100644 src/components/fields/Action/BasicCell.tsx delete mode 100644 src/components/fields/Action/FormDialog/Context.ts delete mode 100644 src/components/fields/Action/FormDialog/Dialog.tsx delete mode 100644 src/components/fields/Action/FormDialog/Provider.tsx delete mode 100644 src/components/fields/Action/FormDialog/index.ts delete mode 100644 src/components/fields/Action/FormDialog/props.ts delete mode 100644 src/components/fields/Action/FormFieldSnippets.tsx delete mode 100644 src/components/fields/Action/Settings.tsx delete mode 100644 src/components/fields/Action/SideDrawerField.tsx delete mode 100644 src/components/fields/Action/TableCell.tsx delete mode 100644 src/components/fields/Action/action.d.ts delete mode 100644 src/components/fields/Action/index.tsx delete mode 100644 src/components/fields/Action/templates.ts delete mode 100644 src/components/fields/Aggregate/Settings.tsx delete mode 100644 src/components/fields/Aggregate/index.tsx delete mode 100644 src/components/fields/Checkbox/SideDrawerField.tsx delete mode 100644 src/components/fields/Checkbox/TableCell.tsx delete mode 100644 src/components/fields/Checkbox/index.tsx delete mode 100644 src/components/fields/Code/BasicCell.tsx delete mode 100644 src/components/fields/Code/Settings.tsx delete mode 100644 src/components/fields/Code/SideDrawerField.tsx delete mode 100644 src/components/fields/Code/index.tsx delete mode 100644 src/components/fields/Color/InlineCell.tsx delete mode 100644 src/components/fields/Color/PopoverCell.tsx delete mode 100644 src/components/fields/Color/SideDrawerField.tsx delete mode 100644 src/components/fields/Color/index.tsx delete mode 100644 src/components/fields/ConnectService/ConnectServiceSelect/PopupContents.tsx delete mode 100644 src/components/fields/ConnectService/ConnectServiceSelect/index.tsx delete mode 100644 src/components/fields/ConnectService/ConnectServiceSelect/styles.ts delete mode 100644 src/components/fields/ConnectService/InlineCell.tsx delete mode 100644 src/components/fields/ConnectService/PopoverCell.tsx delete mode 100644 src/components/fields/ConnectService/Settings.tsx delete mode 100644 src/components/fields/ConnectService/SideDrawerField.tsx delete mode 100644 src/components/fields/ConnectService/index.tsx delete mode 100644 src/components/fields/ConnectService/utils.ts delete mode 100644 src/components/fields/ConnectTable/ConnectTableSelect.tsx delete mode 100644 src/components/fields/ConnectTable/InlineCell.tsx delete mode 100644 src/components/fields/ConnectTable/PopoverCell.tsx delete mode 100644 src/components/fields/ConnectTable/Settings.tsx delete mode 100644 src/components/fields/ConnectTable/SideDrawerField.tsx delete mode 100644 src/components/fields/ConnectTable/index.tsx delete mode 100644 src/components/fields/ConnectTable/utils.ts delete mode 100644 src/components/fields/Connector/InlineCell.tsx delete mode 100644 src/components/fields/Connector/PopoverCell.tsx delete mode 100644 src/components/fields/Connector/Select/PopupContents.tsx delete mode 100644 src/components/fields/Connector/Select/index.tsx delete mode 100644 src/components/fields/Connector/Select/styles.ts delete mode 100644 src/components/fields/Connector/Settings.tsx delete mode 100644 src/components/fields/Connector/SideDrawerField.tsx delete mode 100644 src/components/fields/Connector/connector.d.ts delete mode 100644 src/components/fields/Connector/index.tsx delete mode 100644 src/components/fields/Connector/types.d.ts delete mode 100644 src/components/fields/Connector/utils.ts delete mode 100644 src/components/fields/CreatedAt/SideDrawerField.tsx delete mode 100644 src/components/fields/CreatedAt/TableCell.tsx delete mode 100644 src/components/fields/CreatedAt/index.tsx delete mode 100644 src/components/fields/CreatedBy/Settings.tsx delete mode 100644 src/components/fields/CreatedBy/SideDrawerField.tsx delete mode 100644 src/components/fields/CreatedBy/TableCell.tsx delete mode 100644 src/components/fields/CreatedBy/index.tsx delete mode 100644 src/components/fields/Date/BasicCell.tsx delete mode 100644 src/components/fields/Date/Filter.tsx delete mode 100644 src/components/fields/Date/Settings.tsx delete mode 100644 src/components/fields/Date/SideDrawerField.tsx delete mode 100644 src/components/fields/Date/TableCell.tsx delete mode 100644 src/components/fields/Date/index.tsx delete mode 100644 src/components/fields/Date/utils.ts delete mode 100644 src/components/fields/DateTime/BasicCell.tsx delete mode 100644 src/components/fields/DateTime/Filter.tsx delete mode 100644 src/components/fields/DateTime/Settings.tsx delete mode 100644 src/components/fields/DateTime/SideDrawerField.tsx delete mode 100644 src/components/fields/DateTime/TableCell.tsx delete mode 100644 src/components/fields/DateTime/index.tsx delete mode 100644 src/components/fields/Derivative/ContextMenuActions.tsx delete mode 100644 src/components/fields/Derivative/Settings.tsx delete mode 100644 src/components/fields/Derivative/derivative.d.ts delete mode 100644 src/components/fields/Derivative/index.tsx delete mode 100644 src/components/fields/Duration/SideDrawerField.tsx delete mode 100644 src/components/fields/Duration/TableCell.tsx delete mode 100644 src/components/fields/Duration/index.tsx delete mode 100644 src/components/fields/Duration/utils.ts delete mode 100644 src/components/fields/Email/SideDrawerField.tsx delete mode 100644 src/components/fields/Email/index.tsx delete mode 100644 src/components/fields/File/SideDrawerField.tsx delete mode 100644 src/components/fields/File/TableCell.tsx delete mode 100644 src/components/fields/File/index.tsx delete mode 100644 src/components/fields/Id/SideDrawerField.tsx delete mode 100644 src/components/fields/Id/TableCell.tsx delete mode 100644 src/components/fields/Id/index.tsx delete mode 100644 src/components/fields/Image/SideDrawerField.tsx delete mode 100644 src/components/fields/Image/TableCell.tsx delete mode 100644 src/components/fields/Image/index.tsx delete mode 100644 src/components/fields/Json/BasicCell.tsx delete mode 100644 src/components/fields/Json/Settings.tsx delete mode 100644 src/components/fields/Json/SideDrawerField.tsx delete mode 100644 src/components/fields/Json/index.tsx delete mode 100644 src/components/fields/LongText/BasicCell.tsx delete mode 100644 src/components/fields/LongText/SideDrawerField.tsx delete mode 100644 src/components/fields/LongText/index.tsx delete mode 100644 src/components/fields/MultiSelect/ConvertStringToArray.tsx delete mode 100644 src/components/fields/MultiSelect/Filter.ts delete mode 100644 src/components/fields/MultiSelect/InlineCell.tsx delete mode 100644 src/components/fields/MultiSelect/PopoverCell.tsx delete mode 100644 src/components/fields/MultiSelect/SideDrawerField.tsx delete mode 100644 src/components/fields/MultiSelect/index.tsx delete mode 100644 src/components/fields/MultiSelect/utils.ts delete mode 100644 src/components/fields/Number/BasicCell.tsx delete mode 100644 src/components/fields/Number/Filter.tsx delete mode 100644 src/components/fields/Number/SideDrawerField.tsx delete mode 100644 src/components/fields/Number/index.tsx delete mode 100644 src/components/fields/Percentage/BasicCell.tsx delete mode 100644 src/components/fields/Percentage/SideDrawerField.tsx delete mode 100644 src/components/fields/Percentage/index.tsx delete mode 100644 src/components/fields/Phone/SideDrawerField.tsx delete mode 100644 src/components/fields/Phone/index.tsx delete mode 100644 src/components/fields/Rating/Settings.tsx delete mode 100644 src/components/fields/Rating/SideDrawerField.tsx delete mode 100644 src/components/fields/Rating/TableCell.tsx delete mode 100644 src/components/fields/Rating/index.tsx delete mode 100644 src/components/fields/RichText/SideDrawerField.tsx delete mode 100644 src/components/fields/RichText/TableCell.tsx delete mode 100644 src/components/fields/RichText/index.tsx delete mode 100644 src/components/fields/ShortText/Filter.tsx delete mode 100644 src/components/fields/ShortText/Settings.tsx delete mode 100644 src/components/fields/ShortText/SideDrawerField.tsx delete mode 100644 src/components/fields/ShortText/index.tsx delete mode 100644 src/components/fields/SingleSelect/InlineCell.tsx delete mode 100644 src/components/fields/SingleSelect/PopoverCell.tsx delete mode 100644 src/components/fields/SingleSelect/Settings.tsx delete mode 100644 src/components/fields/SingleSelect/SideDrawerField.tsx delete mode 100644 src/components/fields/SingleSelect/index.tsx delete mode 100644 src/components/fields/SingleSelect/utils.ts delete mode 100644 src/components/fields/Slider/Settings.tsx delete mode 100644 src/components/fields/Slider/SideDrawerField.tsx delete mode 100644 src/components/fields/Slider/TableCell.tsx delete mode 100644 src/components/fields/Slider/index.tsx delete mode 100644 src/components/fields/Status/ConditionList.tsx delete mode 100644 src/components/fields/Status/ConditionModal.tsx delete mode 100644 src/components/fields/Status/ConditionModalContent.tsx delete mode 100644 src/components/fields/Status/Filter.tsx delete mode 100644 src/components/fields/Status/InlineCell.tsx delete mode 100644 src/components/fields/Status/PopoverCell.tsx delete mode 100644 src/components/fields/Status/Settings.tsx delete mode 100644 src/components/fields/Status/SideDrawerField.tsx delete mode 100644 src/components/fields/Status/index.tsx delete mode 100644 src/components/fields/Status/styles.ts delete mode 100644 src/components/fields/Status/utils/conditionListHelper.ts delete mode 100644 src/components/fields/Status/utils/getLabelHelper.ts delete mode 100644 src/components/fields/SubTable/Settings.tsx delete mode 100644 src/components/fields/SubTable/SideDrawerField.tsx delete mode 100644 src/components/fields/SubTable/TableCell.tsx delete mode 100644 src/components/fields/SubTable/index.tsx delete mode 100644 src/components/fields/SubTable/utils.ts delete mode 100644 src/components/fields/UpdatedAt/SideDrawerField.tsx delete mode 100644 src/components/fields/UpdatedAt/TableCell.tsx delete mode 100644 src/components/fields/UpdatedAt/index.tsx delete mode 100644 src/components/fields/UpdatedBy/SideDrawerField.tsx delete mode 100644 src/components/fields/UpdatedBy/TableCell.tsx delete mode 100644 src/components/fields/UpdatedBy/index.tsx delete mode 100644 src/components/fields/Url/SideDrawerField.tsx delete mode 100644 src/components/fields/Url/TableCell.tsx delete mode 100644 src/components/fields/Url/index.tsx delete mode 100644 src/components/fields/User/SideDrawerField.tsx delete mode 100644 src/components/fields/User/TableCell.tsx delete mode 100644 src/components/fields/User/index.tsx delete mode 100644 src/components/fields/_BasicCell/BasicCellContextMenuActions.tsx delete mode 100644 src/components/fields/_BasicCell/BasicCellName.tsx delete mode 100644 src/components/fields/_BasicCell/BasicCellNull.tsx delete mode 100644 src/components/fields/_BasicCell/BasicCellValue.tsx delete mode 100644 src/components/fields/_withTableCell/withBasicCell.tsx delete mode 100644 src/components/fields/_withTableCell/withHeavyCell.tsx delete mode 100644 src/components/fields/_withTableCell/withPopoverCell.tsx delete mode 100644 src/components/fields/index.tsx delete mode 100644 src/components/fields/types.ts rename src/{firebase => config}/firebaseui.ts (73%) delete mode 100644 src/constants/routes.ts create mode 100644 src/constants/routes.tsx delete mode 100644 src/contexts/AppContext.tsx delete mode 100644 src/contexts/EditorContext.ts delete mode 100644 src/contexts/ProjectContext.tsx delete mode 100644 src/contexts/SnackLogContext.tsx delete mode 100644 src/contexts/SwrContext.tsx delete mode 100644 src/firebase/config.ts delete mode 100644 src/firebase/index.ts delete mode 100644 src/hooks/useCollection.ts delete mode 100644 src/hooks/useCombinedRefs.ts delete mode 100644 src/hooks/useDoc.ts create mode 100644 src/hooks/useFirestoreCollectionWithAtom.ts create mode 100644 src/hooks/useFirestoreDocWithAtom.ts delete mode 100644 src/hooks/useHotkeys.ts delete mode 100644 src/hooks/useKeyPress.ts delete mode 100644 src/hooks/useRouter.ts delete mode 100644 src/hooks/useSettings.ts delete mode 100644 src/hooks/useTable/index.ts delete mode 100644 src/hooks/useTable/useTableConfig.ts delete mode 100644 src/hooks/useTable/useTableData.tsx delete mode 100644 src/hooks/useTable/useUploader.tsx delete mode 100644 src/hooks/useWindowSize.ts rename src/{components/Auth => layouts}/AuthLayout.tsx (93%) rename src/{components/Auth/MarketingBanner.tsx => layouts/MarketingPanel.tsx} (98%) create mode 100644 src/layouts/Nav.tsx rename src/{components => layouts}/Navigation/NavDrawer.tsx (67%) rename src/{components => layouts}/Navigation/NavItem.tsx (84%) create mode 100644 src/layouts/Navigation/NavTableSection.tsx rename src/{components/Navigation/index.tsx => layouts/Navigation/Navigation.tsx} (71%) rename src/{components => layouts}/Navigation/UpdateCheckBadge.tsx (100%) rename src/{components => layouts}/Navigation/UserMenu.tsx (83%) create mode 100644 src/layouts/Navigation/index.ts create mode 100644 src/layouts/RequireAuth.tsx delete mode 100644 src/pages/Auth/SetupGuide.tsx create mode 100644 src/pages/JotaiTest.tsx create mode 100644 src/pages/NotFound.tsx delete mode 100644 src/pages/PageNotFound.tsx delete mode 100644 src/pages/RowyRunTest.tsx delete mode 100644 src/pages/Table.tsx create mode 100644 src/pages/TableTest.tsx rename src/pages/{Home.tsx => Tables.tsx} (57%) delete mode 100644 src/pages/Test.tsx create mode 100644 src/reportWebVitals.ts delete mode 100644 src/serviceWorker.ts create mode 100644 src/sources/ProjectSourceFirebase.tsx create mode 100644 src/sources/RowyProject.tsx create mode 100644 src/sources/TableSourceFirestore.tsx create mode 100644 src/sources/UserManagementSourceFirebase.tsx delete mode 100644 src/space-grotesk.css create mode 100644 src/test/App.test.tsx create mode 100644 src/test/custom-jest-env.js create mode 100644 src/test/setupTests.ts create mode 100644 src/test/testUtils.tsx create mode 100644 src/theme/RowyThemeProvider.tsx create mode 100644 src/theme/index.ts rename src/theme/{index.tsx => themes.ts} (93%) rename types/custom.ts => src/types/files.d.ts (100%) create mode 100644 src/types/json-stable-stringify-without-jsonify.d.ts rename types/react-element-scroll-hook.ts => src/types/react-element-scroll-hook.d.ts (100%) create mode 100644 src/types/table.d.ts delete mode 100644 src/utils/CustomBrowserRouter.tsx delete mode 100644 src/utils/PrivateRoute.tsx delete mode 100644 src/utils/auth.ts delete mode 100644 src/utils/color.ts delete mode 100644 src/utils/fns.ts delete mode 100644 src/utils/rowyRun.ts create mode 100644 storage.rules delete mode 100644 types/@mui/styles.ts diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..37236231 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +yarn lint-staged diff --git a/.prettierignore b/.prettierignore index 63022880..9ede4117 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ node_modules/ .yarn +emulators/ diff --git a/craco.config.js b/craco.config.js index 46000fac..93d84349 100644 --- a/craco.config.js +++ b/craco.config.js @@ -1,3 +1,4 @@ +const { whenDev } = require("@craco/craco"); const CracoAlias = require("craco-alias"); const CracoSwcPlugin = require("craco-swc"); @@ -11,20 +12,43 @@ module.exports = { tsConfigPath: "./tsconfig.extend.json", }, }, - { - plugin: CracoSwcPlugin, - options: { - swcLoaderOptions: { - jsc: { - target: "es2019", - transform: { - react: { - runtime: "automatic", + // Use Babel on dev since Jotai doesn’t have swc plugins yet + // See https://github.com/pmndrs/jotai/discussions/1057 + // Use swc on production and test since Babel seems to break Jest + ...whenDev( + () => [], + [ + { + plugin: CracoSwcPlugin, + options: { + swcLoaderOptions: { + jsc: { + target: "es2021", + transform: { + react: { + runtime: "automatic", + }, + }, }, }, }, }, - }, - }, + ] + ), ], + babel: { + plugins: [ + "jotai/babel/plugin-debug-label", + "./node_modules/jotai/babel/plugin-react-refresh", + ], + }, + jest: { + configure: (jestConfig) => { + jestConfig.setupFilesAfterEnv = ["./src/test/setupTests.ts"]; + jestConfig.forceExit = true; // jest hangs if we don't have this + + jestConfig.moduleNameMapper["^lodash-es$"] = "lodash"; + return jestConfig; + }, + }, }; diff --git a/emulators/auth_export/accounts.json b/emulators/auth_export/accounts.json new file mode 100644 index 00000000..b22a33c3 --- /dev/null +++ b/emulators/auth_export/accounts.json @@ -0,0 +1 @@ +{"kind":"identitytoolkit#DownloadAccountResponse","users":[{"localId":"26CJMrwlouNRwkiLofNK07DNgKhw","createdAt":"1651022832613","lastLoginAt":"1651630548960","displayName":"Admin User","photoUrl":"","customAttributes":"{\"roles\": [\"ADMIN\"]}","providerUserInfo":[{"providerId":"google.com","rawId":"abc123","federatedId":"abc123","displayName":"Admin User","email":"admin@example.com"}],"validSince":"1651630530","email":"admin@example.com","emailVerified":true,"disabled":false,"lastRefreshAt":"2022-05-04T02:15:48.960Z"},{"localId":"3xTRVPnJGT2GE6lkiWKZp1jShuXj","createdAt":"1651023059442","lastLoginAt":"1651223181908","displayName":"Editor User","providerUserInfo":[{"providerId":"google.com","rawId":"1535779573397289142795231390488730790451","federatedId":"1535779573397289142795231390488730790451","displayName":"Editor User","email":"editor@example.com"}],"validSince":"1651630530","email":"editor@example.com","emailVerified":true,"disabled":false}]} \ No newline at end of file diff --git a/emulators/auth_export/config.json b/emulators/auth_export/config.json new file mode 100644 index 00000000..bb253cf7 --- /dev/null +++ b/emulators/auth_export/config.json @@ -0,0 +1 @@ +{"signIn":{"allowDuplicateEmails":false},"usageMode":"DEFAULT"} \ No newline at end of file diff --git a/emulators/firebase-export-metadata.json b/emulators/firebase-export-metadata.json new file mode 100644 index 00000000..6b385ef3 --- /dev/null +++ b/emulators/firebase-export-metadata.json @@ -0,0 +1,12 @@ +{ + "version": "10.6.0", + "firestore": { + "version": "1.14.1", + "path": "firestore_export", + "metadata_file": "firestore_export/firestore_export.overall_export_metadata" + }, + "auth": { + "version": "10.6.0", + "path": "auth_export" + } +} \ No newline at end of file diff --git a/emulators/firestore_export/all_namespaces/all_kinds/all_namespaces_all_kinds.export_metadata b/emulators/firestore_export/all_namespaces/all_kinds/all_namespaces_all_kinds.export_metadata new file mode 100644 index 0000000000000000000000000000000000000000..9e8cd87dcb4ab315cd381a6ced4a6e8f25bf5e9c GIT binary patch literal 52 zcmd;5;Sxy8EJ`gd$uCNcPpv4(FDen3{o&=+$49<1Nvvyo1!f5Ga4`sREdl$Pik F002f(77+jd literal 0 HcmV?d00001 diff --git a/emulators/firestore_export/all_namespaces/all_kinds/output-0 b/emulators/firestore_export/all_namespaces/all_kinds/output-0 new file mode 100644 index 0000000000000000000000000000000000000000..78e1cac6ba3398051cfc572ba99fda7fd912556e GIT binary patch literal 835 zcmbV~%TC)s6ozL|3@J8I8dy|EEk%(kP!?4IHEfB1QW9b=;l7Eccu2+>Uo^HG;zcX* zAUr^&z5x~gs?l4c3^jv>k zeb@7uD4?QBT+*NpbwfkXX(|%r-%cNHtZ%Kl<;9Ju#f2hovF*y9KWW#R(T;71q4XQj zgvV(xh6*U&Ne@Fx70SP5DBCF;2^5clZn41Uq+=3?N;Cxeg2h5ljBU!?_&sRUA&g5h z0y)|xv-FTSKBph|J?99cBMc8O8&01UcI9;wJ=gtT;78v$+pp0uWNsrc;w+@86LF$e zK!v_6?(Kgk{bKg_@h|)$^`?q*<*I0NFEZELEw=0(n3Yd6^Jb&cY#VXzMmt;>0If7% zT{7b{EH%`^rhEsv+9`$;oXEJU0B4P6D8U?*l5kOm2YkZiajIe*J|qCTKrn}hjs!Zq zx&~c2rJ^XV%Z!voL`&ittR;0{dK=Eb=LBS+UnO^6w=aw0CkLn*TWUsPi86dmTD`k# s2?GX8mc!g@M~vP&Vi;Z%1)gJw^W%SERT?7SV~CMk2c?6@tZ;AQ6$!EN!~g&Q literal 0 HcmV?d00001 diff --git a/emulators/firestore_export/firestore_export.overall_export_metadata b/emulators/firestore_export/firestore_export.overall_export_metadata new file mode 100644 index 0000000000000000000000000000000000000000..a87e2efab9471dfa64587727a01b7a11af3417ca GIT binary patch literal 95 zcmdmy>*B}Az-Y|aUZoYlz{ust#lpcP!7SvMn3EHqmzbMcT#%TYTC5M^W@qN5Kv)Qg cc({aKYDGbQQAvDmYDr>BVo9O|i^5?x08E@8OaK4? literal 0 HcmV?d00001 diff --git a/firebase.json b/firebase.json index cfbc74ce..26e83bd4 100644 --- a/firebase.json +++ b/firebase.json @@ -8,5 +8,26 @@ "destination": "/index.html" } ] + }, + "firestore": { + "rules": "firestore.rules", + "indexes": "firestore.indexes.json" + }, + "storage": { + "rules": "storage.rules" + }, + "emulators": { + "auth": { + "port": 9099 + }, + "firestore": { + "port": 9299 + }, + "storage": { + "port": 9199 + }, + "ui": { + "enabled": true + } } } diff --git a/firestore.indexes.json b/firestore.indexes.json new file mode 100644 index 00000000..415027e5 --- /dev/null +++ b/firestore.indexes.json @@ -0,0 +1,4 @@ +{ + "indexes": [], + "fieldOverrides": [] +} diff --git a/firestore.rules b/firestore.rules new file mode 100644 index 00000000..91451d69 --- /dev/null +++ b/firestore.rules @@ -0,0 +1,36 @@ +rules_version = '2'; +service cloud.firestore { + match /databases/{database}/documents { + // Allow admins to read and write all documents + match /{document=**} { + allow read, write: if hasAnyRole(["ADMIN", "OWNER"]); + } + + // Rowy: Allow signed in users to read Rowy configuration and admins to write + match /_rowy_/{docId} { + allow read: if request.auth.token.roles.size() > 0; + allow write: if hasAnyRole(["ADMIN", "OWNER"]); + match /{document=**} { + allow read: if request.auth.token.roles.size() > 0; + allow write: if hasAnyRole(["ADMIN", "OWNER"]); + } + } + // Rowy: Allow users to edit their settings + match /_rowy_/userManagement/users/{userId} { + allow get, update, delete: if isDocOwner(userId); + allow create: if request.auth != null; + } + // Rowy: Allow public to read public Rowy configuration + match /_rowy_/publicSettings { + allow get: if true; + } + + // Rowy: Utility functions + function isDocOwner(docId) { + return request.auth != null && (request.auth.uid == resource.id || request.auth.uid == docId); + } + function hasAnyRole(roles) { + return request.auth != null && request.auth.token.roles.hasAny(roles); + } + } +} diff --git a/package.json b/package.json index f86fd68a..2a2aeeef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rowy", - "version": "2.5.0", + "version": "2.6.0-alpha.0", "homepage": "https://rowy.io", "repository": { "type": "git", @@ -8,94 +8,106 @@ }, "private": true, "dependencies": { - "@craco/craco": "^6.2.0", - "@date-io/date-fns": "1.x", - "@emotion/react": "^11.4.0", - "@emotion/styled": "^11.3.0", - "@hookform/resolvers": "^2.8.5", - "@mdi/js": "^6.5.95", - "@monaco-editor/react": "^4.3.1", - "@mui/icons-material": "^5.5.1", - "@mui/lab": "^5.0.0-alpha.73", - "@mui/material": "^5.5.1", - "@mui/styles": "^5.5.1", - "@rowy/form-builder": "^0.5.3", - "@rowy/multiselect": "^0.2.3", - "@tinymce/tinymce-react": "^3.12.6", - "algoliasearch": "^4.8.6", - "ansi-to-react": "^6.1.5", - "colord": "^2.7.0", - "compare-versions": "^4.1.1", - "craco-swc": "^0.1.3", - "csv-parse": "^4.15.3", - "date-fns": "^2.19.0", - "dompurify": "^2.2.6", - "file-saver": "^2.0.5", - "firebase": "8.6.8", - "hotkeys-js": "^3.7.2", - "jotai": "^1.5.3", + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mdi/js": "^6.6.96", + "@monaco-editor/react": "^4.4.4", + "@mui/icons-material": "^5.6.0", + "@mui/lab": "^5.0.0-alpha.76", + "@mui/material": "^5.6.0", + "@mui/styles": "^5.6.2", + "@rowy/form-builder": "^0.5.5", + "@rowy/multiselect": "^0.3.0", + "compare-versions": "^4.1.3", + "date-fns": "^2.28.0", + "dompurify": "^2.3.6", + "firebase": "^9.6.11", + "firebaseui": "^6.0.1", + "jotai": "^1.6.5", "json-stable-stringify-without-jsonify": "^1.0.1", - "json2csv": "^5.0.6", - "jszip": "^3.6.0", - "jwt-decode": "^3.1.2", - "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "match-sorter": "^6.3.1", - "notistack": "^2.0.2", - "pb-util": "^1.0.1", - "query-string": "^6.8.3", - "quicktype-core": "^6.0.70", - "react": "^17.0.2", - "react-beautiful-dnd": "^13.0.0", - "react-color-palette": "^6.1.0", - "react-data-grid": "^7.0.0-beta.5", - "react-div-100vh": "^0.6.0", - "react-dnd": "^11.1.3", - "react-dnd-html5-backend": "^11.1.3", - "react-dom": "^17.0.2", - "react-dropzone": "^10.1.8", + "notistack": "^2.0.4", + "quicktype-core": "^6.0.71", + "react": "^18.0.0", + "react-color-palette": "^6.2.0", + "react-data-grid": "7.0.0-beta.5", + "react-div-100vh": "^0.7.0", + "react-dom": "^18.0.0", "react-element-scroll-hook": "^1.1.0", - "react-firebaseui": "^5.0.2", - "react-helmet": "^6.1.0", - "react-hook-form": "^7.21.2", - "react-image": "^4.0.3", - "react-json-view": "^1.19.1", - "react-markdown": "^8.0.0", - "react-router-dom": "^5.0.1", + "react-error-boundary": "^3.1.4", + "react-helmet-async": "^1.3.0", + "react-hook-form": "^7.30.0", + "react-markdown": "^8.0.3", + "react-router-dom": "^6.3.0", "react-router-hash-link": "^2.4.3", - "react-scripts": "^4.0.3", - "react-usestateref": "^1.0.5", + "react-scripts": "^5.0.0", "remark-gfm": "^3.0.1", - "serve": "^11.3.2", - "swr": "^1.0.1", - "tinymce": "^5.10.0", - "typescript": "^4.4.2", - "use-algolia": "^1.4.1", - "use-debounce": "^3.3.0", - "use-persisted-state": "^0.3.3", - "yarn": "^1.22.10" + "swr": "^1.3.0", + "tss-react": "^3.6.2", + "typescript": "^4.6.3", + "use-debounce": "^7.0.1", + "web-vitals": "^2.1.4" }, "scripts": { - "upstream": "git fetch upstream;git merge upstream/main;git commit -m'merge upstream';git push", - "serve": "serve -s build", - "start": "craco start", - "build": "craco build CI=false", - "test": "craco test --env=jsdom", - "eject": "craco eject", + "start": "cross-env PORT=7699 craco start", + "startWithEmulator": "cross-env PORT=7699 REACT_APP_FIREBASE_EMULATOR=true craco start", + "emulators": "firebase emulators:start --only firestore,auth --import ./emulators/ --export-on-exit", + "test": "craco test --env ./src/test/custom-jest-env.js", + "build": "craco build", + "analyze": "source-map-explorer ./build/static/js/*.js", + "prepare": "husky install", "env": "node createDotEnv", "target": "firebase target:apply hosting rowy", - "deploy": "firebase deploy" + "deploy": "firebase deploy --only hosting" }, "engines": { - "node": ">=10" + "node": ">=16" }, "eslintConfig": { - "extends": "react-app" + "plugins": [ + "eslint-plugin-no-relative-import-paths", + "eslint-plugin-tsdoc", + "eslint-plugin-local-rules" + ], + "extends": [ + "react-app", + "react-app/jest", + "prettier" + ], + "rules": { + "no-relative-import-paths/no-relative-import-paths": [ + "error", + { + "allowSameFolder": true + } + ], + "no-restricted-imports": [ + "error", + { + "patterns": [ + { + "group": [ + "lodash", + "lodash/*" + ], + "message": "Use lodash-es instead" + } + ] + } + ], + "tsdoc/syntax": "warn", + "local-rules/no-jotai-use-atom-without-scope": "error" + } }, "browserslist": { "production": [ - ">0.2%", + "> 0.5%", "not dead", - "not op_mini all" + "not op_mini all", + "not ie > 0", + "not and_uc > 0", + "not ios_saf < 14" ], "development": [ "last 1 chrome version", @@ -104,34 +116,41 @@ ] }, "devDependencies": { - "@types/dompurify": "^2.2.1", - "@types/file-saver": "^2.0.1", - "@types/lodash": "^4.14.168", - "@types/node": "^14.14.6", - "@types/react": "^17.0.11", - "@types/react-beautiful-dnd": "^13.0.0", - "@types/react-color": "^3.0.1", - "@types/react-div-100vh": "^0.3.0", - "@types/react-dom": "^17.0.8", - "@types/react-helmet": "^6.1.2", - "@types/react-router-dom": "^5.1.7", - "@types/react-router-hash-link": "^2.4.1", - "@types/use-persisted-state": "^0.3.0", + "@craco/craco": "^6.4.3", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.0.0", + "@testing-library/user-event": "^14.0.4", + "@types/dompurify": "^2.3.3", + "@types/jest": "^27.4.1", + "@types/lodash-es": "^4.17.6", + "@types/node": "^17.0.23", + "@types/react": "^18.0.5", + "@types/react-div-100vh": "^0.4.0", + "@types/react-dom": "^18.0.0", + "@types/react-router-dom": "^5.3.3", + "@types/react-router-hash-link": "^2.4.5", + "@typescript-eslint/parser": "^5.18.0", "craco-alias": "^3.0.1", - "firebase-tools": "^10.1.0", - "husky": "^4.2.5", - "monaco-editor": "^0.21.2", - "playwright": "^1.5.2", - "prettier": "^2.2.1", - "pretty-quick": "^3.0.0", - "raw-loader": "^4.0.2" + "craco-swc": "^0.5.1", + "cross-env": "^7.0.3", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-react-app": "^7.0.0", + "eslint-plugin-local-rules": "^1.1.0", + "eslint-plugin-no-relative-import-paths": "^1.2.0", + "eslint-plugin-tsdoc": "^0.2.16", + "husky": ">=7.0.4", + "lint-staged": ">=12.3.7", + "monaco-editor": "^0.33.0", + "prettier": "^2.6.2", + "raw-loader": "^4.0.2", + "source-map-explorer": "^2.5.2" }, "resolutions": { - "react-hook-form": "^7.21.2" + "@types/react": "^18" }, - "husky": { - "hooks": { - "pre-commit": "pretty-quick --staged" - } + "lint-staged": { + "*.{js,ts,tsx}": "eslint --cache --fix", + "**/*": "prettier --write --ignore-unknown" } } diff --git a/public/_redirects b/public/_redirects deleted file mode 100644 index 11cf5ed6..00000000 --- a/public/_redirects +++ /dev/null @@ -1,2 +0,0 @@ -# Rewrite a path -/* /index.html 200 diff --git a/public/browserconfig.xml b/public/browserconfig.xml deleted file mode 100644 index bf8dc267..00000000 --- a/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #4200ff - - - diff --git a/public/logo192.png b/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt index 01b0f9a1..e9e57dc4 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1,2 +1,3 @@ # https://www.robotstxt.org/robotstxt.html User-agent: * +Disallow: diff --git a/public/site.webmanifest b/public/site.webmanifest index 5ba4c7f1..291e3eee 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -1,19 +1,19 @@ { - "name": "Rowy", - "short_name": "Rowy", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#4200ff", - "background_color": "#4200ff", - "display": "standalone" + "name": "Rowy", + "short_name": "Rowy", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#4200ff", + "background_color": "#4200ff", + "display": "standalone" } diff --git a/public/static/meta.png b/public/static/meta.png index 702f613ba3f2ce69211548184202f82c3c777b3a..305e8273ee85b267556f907143759b245ab93adb 100644 GIT binary patch literal 273920 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�}>|l_HoHD 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 z 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ⅅtv7baNS1S&_1y;j-T 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

Y^o^=20V!=oW(?N09&~f2Z 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�vUCeQARxwQJtnJ^SJR&v44H4GS9Fq`9oEo^c$0JvJJ$X`_IW5 zNleWYF^2yz8h>zi42KnlvCp>a?myu3k93V*W8ES_`3$X^v|N49{djIg2g7t$J_sub z`zWKBh+oI;av@N(J6fqn?VQjOv+27)blBW{u}oK!HIsj@AMTGJU9;H>qqzil);^oC zKX-s6=|JO0oSs{X@ayrQ2R2kyn?bMT+H==UX(lzB7$U$}Oaj9c6Hn+WKAsQ`HN=Xx^Yj! zk3G8%tz5qT&aDR`$8NJ9+J8JYCT`8DO`MgN5$GR$>B2R6j>F;Hx@i~3lgG{m2Zaf5 zB)+wk%hn%1dInvX-MDrqF(K*b;ZwV|?`P}EiJCXVDIijc~)_i(uHxVgza1R zZd|uLF(KI%d0W68GG3%rvof>EiH=f1@9z00kDoJ{%u@3TuG_YGH(f6_F;OaU%E#NE zr{25kkkMdL`0KcS?e@(ZcTb!-@Pi-zpxhf#dUs!F@+40xDk^45C^90Nt^)

kYC< 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 diff --git a/src/App.test.tsx b/src/App.test.tsx deleted file mode 100644 index 23c181f0..00000000 --- a/src/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import App from "./App"; - -it("renders without crashing", () => { - const div = document.createElement("div"); - ReactDOM.render(, div); - ReactDOM.unmountComponentAtNode(div); -}); diff --git a/src/App.tsx b/src/App.tsx index eb610f7b..bc68eafd 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,221 +1,119 @@ import { lazy, Suspense } from "react"; -import { Route, Switch, Redirect } from "react-router-dom"; -import LocalizationProvider from "@mui/lab/LocalizationProvider"; -import AdapterDateFns from "@mui/lab/AdapterDateFns"; +import { Routes, Route, Navigate } from "react-router-dom"; +import { useAtom } from "jotai"; -import { StyledEngineProvider } from "@mui/material/styles"; -import "./space-grotesk.css"; - -import CustomBrowserRouter from "@src/utils/CustomBrowserRouter"; -import PrivateRoute from "@src/utils/PrivateRoute"; -import ErrorBoundary from "@src/components/ErrorBoundary"; import Loading from "@src/components/Loading"; -import Navigation from "@src/components/Navigation"; -import Logo from "@src/assets/Logo"; +import ProjectSourceFirebase from "@src/sources/ProjectSourceFirebase"; +import ConfirmDialog from "@src/components/ConfirmDialog"; import RowyRunModal from "@src/components/RowyRunModal"; +import NotFound from "@src/pages/NotFound"; +import RequireAuth from "@src/layouts/RequireAuth"; +import Navigation from "@src/layouts/Navigation"; +import TableSettingsDialog from "@src/components/TableSettingsDialog"; -import SwrProvider from "@src/contexts/SwrContext"; -import ConfirmationProvider from "@src/components/ConfirmationDialog/Provider"; -import { AppProvider } from "@src/contexts/AppContext"; -import { ProjectContextProvider } from "@src/contexts/ProjectContext"; -import { SnackbarProvider } from "@src/contexts/SnackbarContext"; -import { SnackLogProvider } from "@src/contexts/SnackLogContext"; -import routes from "@src/constants/routes"; +import { globalScope, currentUserAtom } from "@src/atoms/globalScope"; +import { ROUTES } from "@src/constants/routes"; -import AuthPage from "@src/pages/Auth"; +import JotaiTestPage from "@src/pages/JotaiTest"; import SignOutPage from "@src/pages/Auth/SignOut"; -import SignUpPage from "@src/pages/Auth/SignUp"; -import TestPage from "@src/pages/Test"; -import RowyRunTestPage from "@src/pages/RowyRunTest"; -import PageNotFound from "@src/pages/PageNotFound"; - -import Favicon from "@src/assets/Favicon"; -import "@src/analytics"; // prettier-ignore -const AuthSetupGuidePage = lazy(() => import("@src/pages/Auth/SetupGuide" /* webpackChunkName: "AuthSetupGuide" */)); +const AuthPage = lazy(() => import("@src/pages/Auth/index" /* webpackChunkName: "AuthPage" */)); // prettier-ignore -const ImpersonatorAuthPage = lazy(() => import("./pages/Auth/ImpersonatorAuth" /* webpackChunkName: "ImpersonatorAuthPage" */)); +const SignUpPage = lazy(() => import("@src/pages/Auth/SignUp" /* webpackChunkName: "SignUpPage" */)); // prettier-ignore -const JwtAuthPage = lazy(() => import("./pages/Auth/JwtAuth" /* webpackChunkName: "JwtAuthPage" */)); +const JwtAuthPage = lazy(() => import("@src/pages/Auth/JwtAuth" /* webpackChunkName: "JwtAuthPage" */)); +// prettier-ignore +const ImpersonatorAuthPage = lazy(() => import("@src/pages/Auth/ImpersonatorAuth" /* webpackChunkName: "ImpersonatorAuthPage" */)); -// prettier-ignore -const HomePage = lazy(() => import("./pages/Home" /* webpackChunkName: "HomePage" */)); -// prettier-ignore -const TablePage = lazy(() => import("./pages/Table" /* webpackChunkName: "TablePage" */)); - -// prettier-ignore -const ProjectSettingsPage = lazy(() => import("./pages/Settings/ProjectSettings" /* webpackChunkName: "ProjectSettingsPage" */)); -// prettier-ignore -const UserSettingsPage = lazy(() => import("./pages/Settings/UserSettings" /* webpackChunkName: "UserSettingsPage" */)); -// prettier-ignore -const UserManagementPage = lazy(() => import("./pages/Settings/UserManagement" /* webpackChunkName: "UserManagementPage" */)); // prettier-ignore const SetupPage = lazy(() => import("@src/pages/Setup" /* webpackChunkName: "SetupPage" */)); +// prettier-ignore +const TablesPage = lazy(() => import("@src/pages/Tables" /* webpackChunkName: "TablesPage" */)); +// prettier-ignore +const TablePage = lazy(() => import("@src/pages/TableTest" /* webpackChunkName: "TablePage" */)); + +// prettier-ignore +const UserSettingsPage = lazy(() => import("@src/pages/Settings/UserSettings" /* webpackChunkName: "UserSettingsPage" */)); +// prettier-ignore +const ProjectSettingsPage = lazy(() => import("@src/pages/Settings/ProjectSettings" /* webpackChunkName: "ProjectSettingsPage" */)); +// prettier-ignore +const UserManagementPage = lazy(() => import("@src/pages/Settings/UserManagement" /* webpackChunkName: "UserManagementPage" */)); +// const RowyRunTestPage = lazy(() => import("@src/pages/RowyRunTest" /* webpackChunkName: "RowyRunTestPage" */)); + export default function App() { + const [currentUser] = useAtom(currentUserAtom, globalScope); + return ( - - - - - - - - - - - - }> - - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> + }> + + + - } - /> + {currentUser === undefined ? ( + + ) : ( + + } /> - ( - - - } - /> - } - /> - ( - - !(open && pinned) && ( - - ) - } - > - - - )} - /> - } - /> - } - /> + } /> + } /> + } /> + } /> + + + + } + /> - ( - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - - - )} - /> + } /> - } - /> - } /> - - - - - - - - - - - + + + + + + } + > + } + /> + } /> + + + } /> + } /> + + + } + /> + } /> + } + /> + } + /> + {/* } /> */} + + } /> + + + {/* } /> */} + + )} + ); } diff --git a/src/Providers.tsx b/src/Providers.tsx new file mode 100644 index 00000000..2093c1c5 --- /dev/null +++ b/src/Providers.tsx @@ -0,0 +1,47 @@ +import { ErrorBoundary } from "react-error-boundary"; +import ErrorFallback from "@src/components/ErrorFallback"; +import { BrowserRouter } from "react-router-dom"; +import { HelmetProvider } from "react-helmet-async"; +import { Provider, Atom } from "jotai"; +import { globalScope } from "@src/atoms/globalScope"; +import createCache from "@emotion/cache"; +import { CacheProvider } from "@emotion/react"; +import RowyThemeProvider from "@src/theme/RowyThemeProvider"; +import SnackbarProvider from "@src/contexts/SnackbarContext"; + +import { Suspense } from "react"; +import Loading from "@src/components/Loading"; + +export const muiCache = createCache({ key: "mui", prepend: true }); + +export interface IProvidersProps { + children: React.ReactNode; + initialAtomValues?: Iterable, unknown]>; +} + +export default function Providers({ + children, + initialAtomValues, +}: IProvidersProps) { + return ( + + + + + + + + + }> + {children} + + + + + + + + + + ); +} diff --git a/src/analytics.ts b/src/analytics.ts index bc30d268..e72e629a 100644 --- a/src/analytics.ts +++ b/src/analytics.ts @@ -1,5 +1,5 @@ -import firebase from "firebase/app"; -import "firebase/analytics"; +import { initializeApp } from "firebase/app"; +import { getAnalytics, logEvent } from "firebase/analytics"; const firebaseConfig = { apiKey: "AIzaSyArABiYGK7dZgwSk0pw_6vKbOt6U1ZRPpc", @@ -11,7 +11,6 @@ const firebaseConfig = { measurementId: "G-0VWE25LFZJ", }; -// Initialize Firebase -const rowyServiceApp = firebase.initializeApp(firebaseConfig, "rowy-service"); - -export const analytics = firebase.analytics(rowyServiceApp); +const rowyServiceApp = initializeApp(firebaseConfig, "rowy-service"); +export const analytics = getAnalytics(rowyServiceApp); +export { logEvent }; diff --git a/src/assets/BrandedBackground.tsx b/src/assets/BrandedBackground.tsx index febb3cd2..bad4b875 100644 --- a/src/assets/BrandedBackground.tsx +++ b/src/assets/BrandedBackground.tsx @@ -1,19 +1,15 @@ -import Helmet from "react-helmet"; import { use100vh } from "react-div-100vh"; -import { useTheme, alpha } from "@mui/material/styles"; -import { Box, BoxProps } from "@mui/material"; +import { GlobalStyles, Box, BoxProps } from "@mui/material"; +import { alpha } from "@mui/material/styles"; import bgPattern from "@src/assets/bg-pattern.svg"; import bgPatternDark from "@src/assets/bg-pattern-dark.svg"; export default function BrandedBackground() { - const theme = useTheme(); - return ( - - - + /> ); } diff --git a/src/assets/LogoRowyRun.tsx b/src/assets/LogoRowyRun.tsx index c52bcecb..04152653 100644 --- a/src/assets/LogoRowyRun.tsx +++ b/src/assets/LogoRowyRun.tsx @@ -24,14 +24,14 @@ export default function LogoRowyRun({ Rowy Run diff --git a/src/assets/favicon.svg b/src/assets/favicon.svg new file mode 100644 index 00000000..91ab2bc1 --- /dev/null +++ b/src/assets/favicon.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/assets/icons/Firebase.tsx b/src/assets/icons/Firebase.tsx index 23076a3b..5065c95b 100644 --- a/src/assets/icons/Firebase.tsx +++ b/src/assets/icons/Firebase.tsx @@ -1,5 +1,5 @@ import SvgIcon, { SvgIconProps } from "@mui/material/SvgIcon"; -import { mdiFirebase } from '@mdi/js'; +import { mdiFirebase } from "@mdi/js"; export default function AddColumn(props: SvgIconProps) { return ( diff --git a/src/atoms/ContextMenu.ts b/src/atoms/ContextMenu.ts deleted file mode 100644 index 77f88a92..00000000 --- a/src/atoms/ContextMenu.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { useAtom } from "jotai"; -import { atomWithReset, useResetAtom, useUpdateAtom } from "jotai/utils"; - -export type SelectedCell = { - rowIndex: number; - colIndex: number; -}; - -export type anchorEl = HTMLElement; - -const selectedCellAtom = atomWithReset(null); -const anchorEleAtom = atomWithReset(null); - -export function useSetAnchorEle() { - const setAnchorEle = useUpdateAtom(anchorEleAtom); - return { setAnchorEle }; -} - -export function useSetSelectedCell() { - const setSelectedCell = useUpdateAtom(selectedCellAtom); - return { setSelectedCell }; -} - -export function useContextMenuAtom() { - const [anchorEle] = useAtom(anchorEleAtom); - const [selectedCell] = useAtom(selectedCellAtom); - const resetAnchorEle = useResetAtom(anchorEleAtom); - const resetSelectedCell = useResetAtom(selectedCellAtom); - - const resetContextMenu = async () => { - await resetAnchorEle(); - await resetSelectedCell(); - }; - - return { - anchorEle, - selectedCell, - resetContextMenu, - }; -} diff --git a/src/atoms/RowyRunModal.ts b/src/atoms/RowyRunModal.ts deleted file mode 100644 index d62d7409..00000000 --- a/src/atoms/RowyRunModal.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { atom, useAtom } from "jotai"; - -export const rowyRunModalAtom = atom({ open: false, feature: "", version: "" }); - -export const useRowyRunModal = () => { - const [, setOpen] = useAtom(rowyRunModalAtom); - - return (feature: string = "", version: string = "") => - setOpen({ open: true, feature, version }); -}; diff --git a/src/atoms/Table.ts b/src/atoms/Table.ts deleted file mode 100644 index 1c97ec87..00000000 --- a/src/atoms/Table.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { atomWithHash } from "jotai/utils"; - -export const modalAtom = atomWithHash< - "cloudLogs" | "extensions" | "webhooks" | "export" | "" ->("modal", ""); diff --git a/src/atoms/globalScope/auth.ts b/src/atoms/globalScope/auth.ts new file mode 100644 index 00000000..96d11686 --- /dev/null +++ b/src/atoms/globalScope/auth.ts @@ -0,0 +1,8 @@ +import { atom } from "jotai"; +import type { User } from "firebase/auth"; + +/** Currently signed in user. `undefined` means loading. */ +export const currentUserAtom = atom(undefined); + +/** User roles from Firebase Auth user custom claims */ +export const userRolesAtom = atom([]); diff --git a/src/atoms/globalScope/index.ts b/src/atoms/globalScope/index.ts new file mode 100644 index 00000000..aed968a4 --- /dev/null +++ b/src/atoms/globalScope/index.ts @@ -0,0 +1,9 @@ +/** Scope for atoms stored at the root of the app */ +export const globalScope = Symbol("globalScope"); + +export * from "./auth"; +export * from "./project"; +export * from "./user"; +export * from "./ui"; + +export * from "./rowyRun"; diff --git a/src/atoms/globalScope/project.ts b/src/atoms/globalScope/project.ts new file mode 100644 index 00000000..df8ecd86 --- /dev/null +++ b/src/atoms/globalScope/project.ts @@ -0,0 +1,94 @@ +import { atom } from "jotai"; +import { sortBy } from "lodash-es"; +import { ThemeOptions } from "@mui/material"; + +import { userRolesAtom } from "./auth"; +import { UserSettings } from "./user"; +import { + UpdateDocFunction, + UpdateCollectionFunction, + TableSettings, +} from "@src/types/table"; + +export const projectIdAtom = atom(""); + +/** Public settings are visible to unauthenticated users */ +export type PublicSettings = Partial<{ + signInOptions: Array< + | "google" + | "twitter" + | "facebook" + | "github" + | "microsoft" + | "apple" + | "yahoo" + | "email" + | "phone" + | "anonymous" + >; + theme: Record<"base" | "light" | "dark", ThemeOptions>; +}>; +/** Public settings are visible to unauthenticated users */ +export const publicSettingsAtom = atom({}); +/** Stores a function that updates public settings */ +export const updatePublicSettingsAtom = + atom | null>(null); + +/** Project settings are visible to authenticated users */ +export type ProjectSettings = Partial<{ + tables: TableSettings[]; + + setupCompleted: boolean; + + rowyRunUrl: string; + rowyRunRegion: string; + rowyRunBuildStatus: "BUILDING" | "COMPLETE"; + services: Partial<{ + hooks: string; + builder: string; + terminal: string; + }>; +}>; +/** Project settings are visible to authenticated users */ +export const projectSettingsAtom = atom({}); +/** Stores a function that updates project settings */ +export const updateProjectSettingsAtom = + atom | null>(null); + +/** Tables visible to the signed-in user based on roles */ +export const tablesAtom = atom((get) => { + const userRoles = get(userRolesAtom); + const tables = get(projectSettingsAtom).tables || []; + + return sortBy(tables, "name") + .filter( + (table) => + userRoles.includes("ADMIN") || + table.roles.some((role) => userRoles.includes(role)) + ) + .map((table) => ({ + ...table, + // Ensure id exists for backwards compatibility + id: table.id || table.collection, + // Ensure section exists + section: table.section ? table.section.trim() : "Other", + })); +}); + +/** Roles used in the project based on table settings */ +export const rolesAtom = atom((get) => + Array.from( + new Set( + get(tablesAtom).reduce( + (a, c) => [...a, ...c.roles], + ["ADMIN", "EDITOR", "VIEWER"] + ) + ) + ) +); + +/** User management page: all users */ +export const allUsersAtom = atom([]); +/** Stores a function that updates a user document */ +export const updateUserAtom = + atom | null>(null); diff --git a/src/atoms/globalScope/rowyRun.ts b/src/atoms/globalScope/rowyRun.ts new file mode 100644 index 00000000..e53d102e --- /dev/null +++ b/src/atoms/globalScope/rowyRun.ts @@ -0,0 +1,134 @@ +import { atom } from "jotai"; +import { selectAtom, atomWithStorage } from "jotai/utils"; +import { isEqual } from "lodash-es"; +import { getIdTokenResult } from "firebase/auth"; + +import { projectSettingsAtom } from "./project"; +import { currentUserAtom } from "./auth"; +import { RunRoute } from "@src/constants/runRoutes"; +import meta from "@root/package.json"; + +/** + * Get rowyRunUrl from projectSettings, but only update when this field changes */ +const rowyRunUrlAtom = selectAtom( + projectSettingsAtom, + (projectSettings) => projectSettings.rowyRunUrl +); +/** + * Get services from projectSettings, but only update when this field changes + */ +const rowyRunServicesAtom = selectAtom( + projectSettingsAtom, + (projectSettings) => projectSettings.services, + isEqual +); + +export interface IRowyRunRequestProps { + /** Optionally force refresh the token */ + forceRefresh?: boolean; + service?: "hooks" | "builder"; + /** Optionally use Rowy Run instance on localhost */ + localhost?: boolean; + + route: RunRoute; + body?: any; + /** Params appended to the URL. Will be transforme to a `/`-separated string. */ + params?: string[]; + /** Parse response as JSON. Default: true */ + json?: boolean; + /** Optionally pass an abort signal to abort the request */ + signal?: AbortSignal; + /** Optionally pass a callback that’s called if Rowy Run not set up */ + handleNotSetUp?: () => void; +} + +/** + * An atom that returns a function to call Rowy Run endpoints using the URL + * defined in project settings and retrieving a JWT token. + * + * Returns `false` if user not signed in or Rowy Run not set up. + * + * @example Basic usage: + * ``` + * const [rowyRun] = useAtom(rowyRunAtom, globalScope); + * ... + * await rowyRun(...); + * ``` + */ +export const rowyRunAtom = atom((get) => { + const rowyRunUrl = get(rowyRunUrlAtom); + const rowyRunServices = get(rowyRunServicesAtom); + const currentUser = get(currentUserAtom); + + return async ({ + forceRefresh, + localhost = false, + service, + route, + params, + body, + signal, + json = true, + handleNotSetUp, + }: IRowyRunRequestProps): Promise => { + if (!currentUser) { + console.log("Rowy Run: Not signed in", route.path); + if (handleNotSetUp) handleNotSetUp(); + return false; + } + const authToken = await getIdTokenResult(currentUser!, forceRefresh); + + const serviceUrl = localhost + ? "http://localhost:8080" + : service + ? rowyRunServices?.[service] + : rowyRunUrl; + if (!serviceUrl) { + console.log("Rowy Run: Not set up", route.path); + if (handleNotSetUp) handleNotSetUp(); + return false; + } + + const { method, path } = route; + let url = serviceUrl + path; + if (params && params.length > 0) url = url + "/" + params.join("/"); + + const response = await fetch(url, { + method: method, + mode: "cors", + cache: "no-cache", + credentials: "same-origin", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + authToken, + }, + redirect: "follow", + referrerPolicy: "no-referrer", + // body data type must match "Content-Type" header + body: body && method !== "GET" ? JSON.stringify(body) : null, + signal, + }); + + if (json) return await response.json(); + return response; + }; +}); + +type RowyRunLatestUpdate = { + lastChecked: string; + rowy: null | Record; + rowyRun: null | Record; + deployedRowy: string; + deployedRowyRun: string; +}; +/** Store latest update from GitHub releases and currently deployed versions */ +export const rowyRunLatestUpdateAtom = atomWithStorage( + "__ROWY__UPDATE_CHECK", + { + lastChecked: "", + rowy: null, + rowyRun: null, + deployedRowy: meta.version, + deployedRowyRun: "", + } +); diff --git a/src/atoms/globalScope/ui.ts b/src/atoms/globalScope/ui.ts new file mode 100644 index 00000000..1725a696 --- /dev/null +++ b/src/atoms/globalScope/ui.ts @@ -0,0 +1,126 @@ +import { atom } from "jotai"; +import { atomWithStorage } from "jotai/utils"; + +import { DialogProps, ButtonProps } from "@mui/material"; +import { TableSettings } from "@src/types/table"; + +/** Nav open state stored in local storage. */ +export const navOpenAtom = atomWithStorage("__ROWY__NAV_OPEN", false); +/** Nav pinned state stored in local storage. */ +export const navPinnedAtom = atomWithStorage("__ROWY__NAV_PINNED", false); + +/** View for tables page */ +export const tablesViewAtom = atomWithStorage<"grid" | "list">( + "__ROWY__HOME_VIEW", + "grid" +); + +export type ConfirmDialogProps = { + open: boolean; + + title?: string; + /** Pass a string to display basic styled text */ + body?: React.ReactNode; + + /** Callback called when user clicks confirm */ + handleConfirm?: () => void; + /** Optionally override confirm button text */ + confirm?: string | JSX.Element; + /** Optionally require user to type this string to enable the confirm button */ + confirmationCommand?: string; + /** Optionally set confirm button color */ + confirmColor?: ButtonProps["color"]; + + /** Callback called when user clicks cancel */ + handleCancel?: () => void; + /** Optionally override cancel button text */ + cancel?: string; + /** Optionally hide cancel button */ + hideCancel?: boolean; + + /** Optionally set dialog max width */ + maxWidth?: DialogProps["maxWidth"]; +}; +/** + * Open a confirm dialog + * + * @example Basic usage: + * ``` + * const confirm = useSetAtom(confirmDialogAtom, globalScope); + * confirm({ handleConfirm: () => ... }); + * ``` + */ +export const confirmDialogAtom = atom( + { open: false } as ConfirmDialogProps, + (get, set, update: Partial) => { + set(confirmDialogAtom, { + ...get(confirmDialogAtom), + open: true, // Don’t require this to be set explicitly + ...update, + }); + } +); + +export type RowyRunModalState = { + open: boolean; + feature: string; + version: string; +}; +/** + * Open global Rowy Run modal if feature not available. + * Calling the set function resets props. + * + * @example Basic usage: + * ``` + * const openRowyRunModal = useSetAtom(rowyRunModalAtom, globalScope); + * openRowyRunModal({ feature: ... , version: ... }); + * ``` + * + * @example Close dialog: + * ``` + * openRowyRunModal({ open: false }) + * ``` + */ +export const rowyRunModalAtom = atom( + { open: false, feature: "", version: "" } as RowyRunModalState, + (_, set, update?: Partial) => { + set(rowyRunModalAtom, { + open: true, + feature: "", + version: "", + ...update, + }); + } +); + +export type TableSettingsDialogState = { + open: boolean; + mode: "create" | "update"; + data: TableSettings | null; +}; +/** + * Open table settings dialog. + * Calling the set function resets props. + * + * @example Basic usage: + * ``` + * const openTableSettingsDialog = useSetAtom(tableSettingsDialogAtom, globalScope); + * openTableSettingsDialog({ data: ... }); + * ``` + * + * @example Clear dialog: + * ``` + * openTableSettingsDialog({ open: false }) + * ``` + */ +export const tableSettingsDialogAtom = atom( + { open: false, mode: "create", data: null } as TableSettingsDialogState, + (_, set, update?: Partial) => { + set(tableSettingsDialogAtom, { + open: true, + mode: "create", + data: null, + ...update, + }); + } +); diff --git a/src/atoms/globalScope/user.ts b/src/atoms/globalScope/user.ts new file mode 100644 index 00000000..f4144c27 --- /dev/null +++ b/src/atoms/globalScope/user.ts @@ -0,0 +1,80 @@ +import { atom } from "jotai"; +import { atomWithStorage } from "jotai/utils"; +import { merge } from "lodash-es"; +import { ThemeOptions } from "@mui/material"; + +import themes from "@src/theme"; +import { publicSettingsAtom } from "./project"; +import { UpdateDocFunction, TableFilter } from "@src/types/table"; + +/** User info and settings */ +export type UserSettings = Partial<{ + _rowy_id: string; + /** Synced from user auth info */ + user: { + email: string; + displayName?: string; + photoURL?: string; + phoneNumber?: string; + }; + roles: string[]; + + theme: Record<"base" | "light" | "dark", ThemeOptions>; + + favoriteTables: string[]; + /** Stores user overrides */ + tables: Record< + string, + Partial<{ + filters: TableFilter[]; + hiddenFields: string[]; + }> + >; +}>; +/** User info and settings */ +export const userSettingsAtom = atom({}); +/** Stores a function that updates user settings */ +export const updateUserSettingsAtom = + atom | null>(null); + +/** + * Stores which theme is currently active, based on user or OS setting. + * Saved in localStorage. + */ +export const themeAtom = atomWithStorage<"light" | "dark">( + "__ROWY__THEME", + "light" +); +/** + * User can override OS theme. Saved in localStorage. + */ +export const themeOverriddenAtom = atomWithStorage( + "__ROWY__THEME_OVERRIDDEN", + false +); + +/** Customized base theme based on project and user settings */ +export const customizedThemesAtom = atom((get) => { + const publicSettings = get(publicSettingsAtom); + const userSettings = get(userSettingsAtom); + + const lightCustomizations = merge( + {}, + publicSettings.theme?.base, + publicSettings.theme?.light, + userSettings.theme?.base, + userSettings.theme?.light + ); + const darkCustomizations = merge( + {}, + publicSettings.theme?.base, + publicSettings.theme?.dark, + userSettings.theme?.base, + userSettings.theme?.dark + ); + + return { + light: themes.light(lightCustomizations), + dark: themes.dark(darkCustomizations), + }; +}); diff --git a/src/atoms/tableScope/index.ts b/src/atoms/tableScope/index.ts new file mode 100644 index 00000000..e5e34cac --- /dev/null +++ b/src/atoms/tableScope/index.ts @@ -0,0 +1,4 @@ +/** Scope for atoms stored at the table level */ +export const tableScope = Symbol("tableScope"); + +export * from "./table"; diff --git a/src/atoms/tableScope/table.ts b/src/atoms/tableScope/table.ts new file mode 100644 index 00000000..6a5af093 --- /dev/null +++ b/src/atoms/tableScope/table.ts @@ -0,0 +1,18 @@ +import { atom } from "jotai"; +import { + TableSettings, + TableSchema, + TableFilter, + TableOrder, +} from "@src/types/table"; + +export const tableIdAtom = atom(undefined); +export const tableSettingsAtom = atom(undefined); +export const tableSchemaAtom = atom(undefined); + +export const tableFiltersAtom = atom([]); +export const tableOrdersAtom = atom([]); +export const tablePageAtom = atom(0); + +export const tableRowsAtom = atom[]>([]); +export const tableLoadingMoreAtom = atom(false); diff --git a/src/components/AccessDenied.tsx b/src/components/AccessDenied.tsx new file mode 100644 index 00000000..00de18d0 --- /dev/null +++ b/src/components/AccessDenied.tsx @@ -0,0 +1,93 @@ +import { useAtom } from "jotai"; + +import { + Typography, + Stack, + Avatar, + Alert, + Divider, + Link as MuiLink, + Button, +} from "@mui/material"; +import SecurityIcon from "@mui/icons-material/SecurityOutlined"; + +import EmptyState from "@src/components/EmptyState"; + +import { + globalScope, + currentUserAtom, + userRolesAtom, +} from "@src/atoms/globalScope"; +import { WIKI_LINKS } from "@src/constants/externalLinks"; +import { ROUTES } from "@src/constants/routes"; + +export default function AccessDenied() { + const [currentUser] = useAtom(currentUserAtom, globalScope); + const [userRoles] = useAtom(userRolesAtom, globalScope); + + if (!currentUser) window.location.reload(); + + return ( + +

+ + + You do not have access to this project. Please contact the project + owner. + + + + + + OR + + + + If you are the project owner, please follow{" "} + + these instructions + {" "} + to set up this project’s security rules. + + + } + sx={{ + position: "fixed", + top: 0, + left: 0, + right: 0, + bottom: 0, + bgcolor: "background.default", + zIndex: 9999, + }} + /> + ); +} diff --git a/src/components/Auth/FirebaseUi.tsx b/src/components/Auth/FirebaseUi.tsx deleted file mode 100644 index 2870fc32..00000000 --- a/src/components/Auth/FirebaseUi.tsx +++ /dev/null @@ -1,286 +0,0 @@ -import { useState, useEffect } from "react"; -import clsx from "clsx"; - -import StyledFirebaseAuth from "react-firebaseui/StyledFirebaseAuth"; -import { Props as FirebaseUiProps } from "react-firebaseui"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { Typography } from "@mui/material"; -import { alpha } from "@mui/material/styles"; -import Skeleton from "@mui/material/Skeleton"; - -import { auth, db } from "@src/firebase"; -import { defaultUiConfig, getSignInOptions } from "@src/firebase/firebaseui"; -import { PUBLIC_SETTINGS } from "@src/config/dbPaths"; - -const useStyles = makeStyles((theme) => - createStyles({ - "@global": { - ".rowy-firebaseui": { - width: "100%", - minHeight: 32, - - "& .firebaseui-container": { - backgroundColor: "transparent", - color: theme.palette.text.primary, - fontFamily: theme.typography.fontFamily, - }, - "& .firebaseui-text": { - color: theme.palette.text.secondary, - fontFamily: theme.typography.fontFamily, - }, - "& .firebaseui-tos": { - ...theme.typography.caption, - color: theme.palette.text.disabled, - }, - "& .firebaseui-country-selector": { - color: theme.palette.text.primary, - }, - "& .firebaseui-title": { - ...theme.typography.h5, - color: theme.palette.text.primary, - }, - "& .firebaseui-subtitle": { - ...theme.typography.h6, - color: theme.palette.text.secondary, - }, - "& .firebaseui-error": { - ...theme.typography.caption, - color: theme.palette.error.main, - }, - - "& .firebaseui-card-content, & .firebaseui-card-footer": { padding: 0 }, - "& .firebaseui-idp-list, & .firebaseui-tenant-list": { margin: 0 }, - "& .firebaseui-idp-list>.firebaseui-list-item, & .firebaseui-tenant-list>.firebaseui-list-item": - { - margin: 0, - }, - "& .firebaseui-list-item + .firebaseui-list-item": { - paddingTop: theme.spacing(1), - }, - - "& .mdl-button": { - borderRadius: theme.shape.borderRadius, - ...theme.typography.button, - }, - "& .mdl-button--raised": { - boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[2]}`, - "&:hover": { - boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[4]}`, - }, - "&:active, &:focus": { - boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[8]}`, - }, - }, - "& .mdl-card": { - boxShadow: "none", - minHeight: 0, - }, - "& .mdl-button--primary.mdl-button--primary": { - color: theme.palette.primary.main, - }, - "& .mdl-button--raised.mdl-button--colored": { - backgroundColor: theme.palette.primary.main, - color: theme.palette.primary.contrastText, - - "&:active, &:focus:not(:active), &:hover": { - backgroundColor: theme.palette.primary.main, - }, - }, - - "& .firebaseui-idp-button.mdl-button--raised, & .firebaseui-tenant-button.mdl-button--raised": - { - maxWidth: "none", - minHeight: 32, - padding: theme.spacing(0.5, 1), - - backgroundColor: theme.palette.action.input + " !important", - "&:hover": { - backgroundColor: theme.palette.action.hover + " !important", - }, - "&:active, &:focus": { - backgroundColor: - theme.palette.action.disabledBackground + " !important", - }, - - "&, &:hover, &.Mui-disabled": { border: "none" }, - "&, &:hover, &:active, &:focus": { - boxShadow: `0 0 0 1px ${theme.palette.action.inputOutline} inset, - 0 ${theme.palette.mode === "dark" ? "" : "-"}1px 0 0 ${ - theme.palette.action.inputOutline - } inset`, - }, - }, - "& .firebaseui-idp-icon": { - display: "block", - width: 20, - height: 20, - }, - "& .firebaseui-idp-text": { - ...theme.typography.button, - color: theme.palette.text.primary, - - paddingLeft: theme.spacing(2), - paddingRight: Number(theme.spacing(2).replace("px", "")) + 18, - marginLeft: -18, - width: "100%", - textAlign: "center", - - "&.firebaseui-idp-text-long": { display: "none" }, - "&.firebaseui-idp-text-short": { display: "table-cell" }, - }, - - "& .firebaseui-idp-google > .firebaseui-idp-text": { - color: theme.palette.text.primary, - }, - "& .firebaseui-idp-github .firebaseui-idp-icon, & [data-provider-id='apple.com'] .firebaseui-idp-icon": - { - filter: theme.palette.mode === "dark" ? "invert(1)" : "", - }, - "& [data-provider-id='microsoft.com'] .firebaseui-idp-icon": { - width: 21, - height: 21, - position: "relative", - left: -1, - top: -1, - }, - "& [data-provider-id='yahoo.com'] > .firebaseui-idp-icon-wrapper > .firebaseui-idp-icon": - { - width: 18, - height: 18, - filter: - theme.palette.mode === "dark" - ? "invert(1) saturate(0) brightness(1.5)" - : "", - }, - "& .firebaseui-idp-password .firebaseui-idp-icon, & .firebaseui-idp-phone .firebaseui-idp-icon, & .firebaseui-idp-anonymous .firebaseui-idp-icon": - { - width: 24, - height: 24, - position: "relative", - left: -2, - filter: theme.palette.mode === "light" ? "invert(1)" : "", - }, - - "& .firebaseui-card-header": { padding: 0 }, - "& .firebaseui-card-actions": { padding: 0 }, - - "& .firebaseui-input, & .firebaseui-input-invalid": { - ...theme.typography.body1, - color: theme.palette.text.primary, - }, - "& .firebaseui-textfield.mdl-textfield .firebaseui-input": { - borderColor: theme.palette.divider, - }, - "& .mdl-textfield.is-invalid .mdl-textfield__input": { - borderColor: theme.palette.error.main, - }, - "& .firebaseui-label": { - ...theme.typography.subtitle2, - color: theme.palette.text.secondary, - }, - "& .mdl-textfield--floating-label.is-dirty .mdl-textfield__label, .mdl-textfield--floating-label.is-focused .mdl-textfield__label": - { - color: theme.palette.text.primary, - }, - "& .firebaseui-textfield.mdl-textfield .firebaseui-label:after": { - backgroundColor: theme.palette.primary.main, - }, - "& .mdl-textfield.is-invalid .mdl-textfield__label:after": { - backgroundColor: theme.palette.error.main, - }, - - "& .mdl-progress>.bufferbar": { - background: alpha(theme.palette.primary.main, 0.33), - }, - "& .mdl-progress>.progressbar": { - backgroundColor: theme.palette.primary.main + " !important", - }, - }, - }, - - signInText: { - display: "block", - textAlign: "center", - color: theme.palette.text.secondary, - margin: theme.spacing(-1, 0, -3), - }, - - skeleton: { - width: "100%", - marginBottom: "calc(var(--spacing-contents) * -1)", - - "& > *": { - width: "100%", - height: 32, - borderRadius: theme.shape.borderRadius, - }, - - "& > * + *": { - marginTop: theme.spacing(1), - }, - }, - }) -); - -export default function FirebaseUi(props: Partial) { - const classes = useStyles(); - - const [signInOptions, setSignInOptions] = useState< - Parameters[0] | undefined - >(); - useEffect(() => { - db.doc(PUBLIC_SETTINGS) - .get() - .then((doc) => { - const options = doc?.get("signInOptions"); - if (!options) { - setSignInOptions(["google"]); - } else { - setSignInOptions(options); - } - }) - .catch(() => setSignInOptions(["google"])); - }, []); - - if (!signInOptions) - return ( - <> - - Continue with - - -
- -
- - ); - - const uiConfig: firebaseui.auth.Config = { - ...defaultUiConfig, - ...props.uiConfig, - callbacks: { - uiShown: () => { - const node = document.getElementById("rowy-firebaseui-skeleton"); - if (node) node.style.display = "none"; - }, - ...props.uiConfig?.callbacks, - }, - signInOptions: getSignInOptions(signInOptions), - }; - - return ( - <> - - Continue with - - - - - ); -} diff --git a/src/components/ButtonWithStatus.tsx b/src/components/ButtonWithStatus.tsx deleted file mode 100644 index 581e62e4..00000000 --- a/src/components/ButtonWithStatus.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from "react"; -import clsx from "clsx"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { Button, ButtonProps } from "@mui/material"; -import { alpha } from "@mui/material/styles"; - -export const useStyles = makeStyles((theme) => - createStyles({ - root: { - position: "relative", - zIndex: 1, - }, - - active: { - color: - theme.palette.mode === "dark" - ? theme.palette.primary.light - : theme.palette.primary.dark, - backgroundColor: alpha( - theme.palette.primary.main, - theme.palette.action.selectedOpacity - ), - borderColor: theme.palette.primary.main, - - "&:hover": { - color: - theme.palette.mode === "dark" - ? theme.palette.primary.light - : theme.palette.primary.dark, - backgroundColor: alpha( - theme.palette.mode === "dark" - ? theme.palette.primary.light - : theme.palette.primary.dark, - theme.palette.action.selectedOpacity + - theme.palette.action.hoverOpacity - ), - borderColor: "currentColor", - }, - }, - }) -); - -export interface IButtonWithStatusProps extends ButtonProps { - active?: boolean; -} - -export const ButtonWithStatus = React.forwardRef(function ButtonWithStatus_( - { active = false, className, ...props }: IButtonWithStatusProps, - ref: React.Ref -) { - const classes = useStyles(); - - return ( - )} diff --git a/src/components/Confirmation.tsx b/src/components/Confirmation.tsx deleted file mode 100644 index 9702452b..00000000 --- a/src/components/Confirmation.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import React, { useState } from "react"; - -import { makeStyles, createStyles } from "@mui/styles"; -import Button from "@mui/material/Button"; -import Dialog from "@mui/material/Dialog"; -import DialogActions from "@mui/material/DialogActions"; -import DialogContent from "@mui/material/DialogContent"; -import DialogContentText from "@mui/material/DialogContentText"; -import DialogTitle from "@mui/material/DialogTitle"; -import TextField from "@mui/material/TextField"; -import { SlideTransitionMui } from "@src/components/Modal/SlideTransition"; - -const useStyles = makeStyles(() => - createStyles({ - root: { - display: "flex", - flexWrap: "wrap", - }, - dryWrapper: {}, - dryField: {}, - }) -); - -export interface IConfirmationProps { - children: JSX.Element; - message?: { - title?: string; - customBody?: string; - body?: string | React.ReactNode; - cancel?: string; - confirm?: string | JSX.Element; - color?: "error"; - }; - confirmationCommand?: string; - functionName?: string; - stopPropagation?: boolean; -} - -export default function Confirmation({ - children, - message, - confirmationCommand, - functionName = "onClick", - stopPropagation = false, -}: IConfirmationProps) { - const classes = useStyles(); - const [showDialog, setShowDialog] = useState(false); - const [dryText, setDryText] = useState(""); - - const handleClose = () => { - setShowDialog(false); - }; - - const confirmHandler = children.props[functionName]; - const button = React.cloneElement(children, { - [functionName]: (e) => { - if (stopPropagation && e && e.stopPropagation) e.stopPropagation(); - setShowDialog(true); - }, - }); - - return ( - <> - {button} - - - - {(message && message.title) || "Are you sure?"} - - {message && ( - - {message.customBody} - {message.body && - (typeof message.body === "string" ? ( - {message.body} - ) : ( - message.body - ))} - {confirmationCommand && ( -
- - Type {confirmationCommand} below to continue: - - { - setDryText(e.target.value); - }} - className={classes.dryField} - InputProps={{ disableUnderline: true }} - autoFocus - margin="dense" - label={confirmationCommand} - fullWidth - /> -
- )} -
- )} - - - - -
- - ); -} diff --git a/src/components/ConfirmationDialog/Context.ts b/src/components/ConfirmationDialog/Context.ts deleted file mode 100644 index d66daa83..00000000 --- a/src/components/ConfirmationDialog/Context.ts +++ /dev/null @@ -1,8 +0,0 @@ -import React, { useContext } from "react"; -import { IConfirmation, CONFIRMATION_EMPTY_STATE } from "./props"; -const ConfirmationContext = React.createContext( - CONFIRMATION_EMPTY_STATE -); -export default ConfirmationContext; - -export const useConfirmation = () => useContext(ConfirmationContext); diff --git a/src/components/ConfirmationDialog/Provider.tsx b/src/components/ConfirmationDialog/Provider.tsx deleted file mode 100644 index 80786606..00000000 --- a/src/components/ConfirmationDialog/Provider.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React, { useState } from "react"; - -import { confirmationProps } from "./props"; -import Dialog from "./Dialog"; -import ConfirmationContext from "./Context"; -interface IConfirmationProviderProps { - children: React.ReactNode; -} - -const ConfirmationProvider: React.FC = ({ - children, -}) => { - const [state, setState] = useState(); - const [open, setOpen] = useState(false); - const handleClose = () => { - setOpen(false); - setTimeout(() => setState(undefined), 300); - }; - const requestConfirmation = (props: confirmationProps) => { - setState(props); - setOpen(true); - }; - return ( - - {children} - - - - ); -}; - -export default ConfirmationProvider; diff --git a/src/components/ConfirmationDialog/index.ts b/src/components/ConfirmationDialog/index.ts deleted file mode 100644 index f2b00002..00000000 --- a/src/components/ConfirmationDialog/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { useConfirmation } from "./Context"; diff --git a/src/components/ConfirmationDialog/props.ts b/src/components/ConfirmationDialog/props.ts deleted file mode 100644 index e9115f25..00000000 --- a/src/components/ConfirmationDialog/props.ts +++ /dev/null @@ -1,27 +0,0 @@ -export type confirmationProps = - | { - title?: string; - customBody?: React.ReactNode; - body?: string; - cancel?: string; - hideCancel?: boolean; - confirm?: string | JSX.Element; - confirmationCommand?: string; - handleConfirm: () => void; - handleCancel?: () => void; - open?: Boolean; - confirmColor?: string; - } - | undefined; -export interface IConfirmation { - dialogProps?: confirmationProps; - handleClose: () => void; - open: boolean; - requestConfirmation: (props: confirmationProps) => void; -} -export const CONFIRMATION_EMPTY_STATE = { - dialogProps: undefined, - open: false, - handleClose: () => {}, - requestConfirmation: () => {}, -}; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx deleted file mode 100644 index 53da9f0c..00000000 --- a/src/components/ErrorBoundary.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { Component } from "react"; -import EmptyState, { IEmptyStateProps } from "./EmptyState"; - -import { Button } from "@mui/material"; -import ReloadIcon from "@mui/icons-material/Refresh"; -import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; - -import meta from "@root/package.json"; - -class ErrorBoundary extends Component< - IEmptyStateProps & { render?: (errorMessage: string) => React.ReactNode } -> { - state = { hasError: false, errorMessage: "" }; - - static getDerivedStateFromError(error: Error) { - // Update state so the next render will show the fallback UI. - return { hasError: true, errorMessage: error.message }; - } - - componentDidCatch(error: Error, errorInfo: object) { - console.log(error, errorInfo); - // You can also log the error to an error reporting service - //logErrorToMyService(error, errorInfo); - } - - render() { - if (this.state.hasError) { - if (this.props.render) return this.props.render(this.state.errorMessage); - - if (this.state.errorMessage.startsWith("Loading chunk")) - return ( - - Reload this page to get the latest update - - - } - fullScreen - /> - ); - - return ( - - {this.state.errorMessage} - - - } - fullScreen - {...this.props} - /> - ); - } - - return this.props.children; - } -} - -export default ErrorBoundary; diff --git a/src/components/ErrorFallback.tsx b/src/components/ErrorFallback.tsx new file mode 100644 index 00000000..e800aa3e --- /dev/null +++ b/src/components/ErrorFallback.tsx @@ -0,0 +1,67 @@ +import { FallbackProps } from "react-error-boundary"; + +import { Button } from "@mui/material"; +import ReloadIcon from "@mui/icons-material/Refresh"; +import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; + +import EmptyState, { IEmptyStateProps } from "@src/components/EmptyState"; +import AccessDenied from "@src/components/AccessDenied"; +import meta from "@root/package.json"; + +export interface IErrorFallbackProps extends FallbackProps, IEmptyStateProps {} + +export default function ErrorFallback({ + error, + resetErrorBoundary, + ...props +}: IErrorFallbackProps) { + if (error.message.startsWith("Loading chunk")) + return ( + + Reload this page to get the latest update + + + } + fullScreen + /> + ); + + if ((error as any).code === "permission-denied") return ; + + return ( + + + {(error as any).code && {(error as any).code}: } + {error.message} + + + + } + fullScreen + {...props} + /> + ); +} diff --git a/src/components/FirebaseUi.tsx b/src/components/FirebaseUi.tsx new file mode 100644 index 00000000..ceda7035 --- /dev/null +++ b/src/components/FirebaseUi.tsx @@ -0,0 +1,272 @@ +import { useMemo, useEffect } from "react"; +import { useAtom } from "jotai"; + +import * as firebaseui from "firebaseui"; +import "firebaseui/dist/firebaseui.css"; +import { onAuthStateChanged } from "firebase/auth"; + +import { makeStyles } from "tss-react/mui"; +import { Typography } from "@mui/material"; +import { alpha } from "@mui/material/styles"; + +import { globalScope, publicSettingsAtom } from "@src/atoms/globalScope"; +import { firebaseAuthAtom } from "@src/sources/ProjectSourceFirebase"; +import { defaultUiConfig, getSignInOptions } from "@src/config/firebaseui"; + +const ELEMENT_ID = "firebaseui_container"; + +const useStyles = makeStyles()((theme) => ({ + root: { + width: "100%", + minHeight: 32, + + "& .firebaseui-container": { + backgroundColor: "transparent", + color: theme.palette.text.primary, + fontFamily: theme.typography.fontFamily, + }, + "& .firebaseui-text": { + color: theme.palette.text.secondary, + fontFamily: theme.typography.fontFamily, + }, + "& .firebaseui-tos": { + ...(theme.typography.caption as any), + color: theme.palette.text.disabled, + }, + "& .firebaseui-country-selector": { + color: theme.palette.text.primary, + }, + "& .firebaseui-title": { + ...(theme.typography.h5 as any), + color: theme.palette.text.primary, + }, + "& .firebaseui-subtitle": { + ...(theme.typography.h6 as any), + color: theme.palette.text.secondary, + }, + "& .firebaseui-error": { + ...(theme.typography.caption as any), + color: theme.palette.error.main, + }, + + "& .firebaseui-card-content, & .firebaseui-card-footer": { padding: 0 }, + "& .firebaseui-idp-list, & .firebaseui-tenant-list": { margin: 0 }, + "& .firebaseui-idp-list>.firebaseui-list-item, & .firebaseui-tenant-list>.firebaseui-list-item": + { + margin: 0, + }, + "& .firebaseui-list-item + .firebaseui-list-item": { + paddingTop: theme.spacing(1), + }, + + "& .mdl-button": { + borderRadius: theme.shape.borderRadius, + ...(theme.typography.button as any), + }, + "& .mdl-button--raised": { + boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[2]}`, + "&:hover": { + boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[4]}`, + }, + "&:active, &:focus": { + boxShadow: `0 -1px 0 0 rgba(0, 0, 0, 0.12) inset, ${theme.shadows[8]}`, + }, + }, + "& .mdl-card": { + boxShadow: "none", + minHeight: 0, + }, + "& .mdl-button--primary.mdl-button--primary": { + color: theme.palette.primary.main, + }, + "& .mdl-button--raised.mdl-button--colored": { + backgroundColor: theme.palette.primary.main, + color: theme.palette.primary.contrastText, + + "&:active, &:focus:not(:active), &:hover": { + backgroundColor: theme.palette.primary.main, + }, + }, + + "& .firebaseui-idp-button.mdl-button--raised, & .firebaseui-tenant-button.mdl-button--raised": + { + maxWidth: "none", + minHeight: 32, + padding: theme.spacing(0.5, 1), + + backgroundColor: theme.palette.action.input + " !important", + "&:hover": { + backgroundColor: theme.palette.action.hover + " !important", + }, + "&:active, &:focus": { + backgroundColor: + theme.palette.action.disabledBackground + " !important", + }, + + "&, &:hover, &.Mui-disabled": { border: "none" }, + "&, &:hover, &:active, &:focus": { + boxShadow: `0 0 0 1px ${theme.palette.action.inputOutline} inset, + 0 ${theme.palette.mode === "dark" ? "" : "-"}1px 0 0 ${ + theme.palette.action.inputOutline + } inset`, + }, + }, + "& .firebaseui-idp-icon": { + display: "block", + width: 20, + height: 20, + }, + "& .firebaseui-idp-text": { + ...(theme.typography.button as any), + color: theme.palette.text.primary, + + paddingLeft: theme.spacing(2), + paddingRight: Number(theme.spacing(2).replace("px", "")) + 18, + marginLeft: -18, + width: "100%", + textAlign: "center", + + "&.firebaseui-idp-text-long": { display: "none" }, + "&.firebaseui-idp-text-short": { display: "table-cell" }, + }, + + "& .firebaseui-idp-google > .firebaseui-idp-text": { + color: theme.palette.text.primary, + }, + "& .firebaseui-idp-github .firebaseui-idp-icon, & [data-provider-id='apple.com'] .firebaseui-idp-icon": + { + filter: theme.palette.mode === "dark" ? "invert(1)" : "", + }, + "& [data-provider-id='microsoft.com'] .firebaseui-idp-icon": { + width: 21, + height: 21, + position: "relative", + left: -1, + top: -1, + }, + "& [data-provider-id='yahoo.com'] > .firebaseui-idp-icon-wrapper > .firebaseui-idp-icon": + { + width: 18, + height: 18, + filter: + theme.palette.mode === "dark" + ? "invert(1) saturate(0) brightness(1.5)" + : "", + }, + "& .firebaseui-idp-password .firebaseui-idp-icon, & .firebaseui-idp-phone .firebaseui-idp-icon, & .firebaseui-idp-anonymous .firebaseui-idp-icon": + { + width: 24, + height: 24, + position: "relative", + left: -2, + filter: theme.palette.mode === "light" ? "invert(1)" : "", + }, + + "& .firebaseui-card-header": { padding: 0 }, + "& .firebaseui-card-actions": { padding: 0 }, + + "& .firebaseui-input, & .firebaseui-input-invalid": { + ...(theme.typography.body1 as any), + color: theme.palette.text.primary, + }, + "& .firebaseui-textfield.mdl-textfield .firebaseui-input": { + borderColor: theme.palette.divider, + }, + "& .mdl-textfield.is-invalid .mdl-textfield__input": { + borderColor: theme.palette.error.main, + }, + "& .firebaseui-label": { + ...(theme.typography.subtitle2 as any), + color: theme.palette.text.secondary, + }, + "& .mdl-textfield--floating-label.is-dirty .mdl-textfield__label, .mdl-textfield--floating-label.is-focused .mdl-textfield__label": + { + color: theme.palette.text.primary, + }, + "& .firebaseui-textfield.mdl-textfield .firebaseui-label:after": { + backgroundColor: theme.palette.primary.main, + }, + "& .mdl-textfield.is-invalid .mdl-textfield__label:after": { + backgroundColor: theme.palette.error.main, + }, + + "& .mdl-progress>.bufferbar": { + background: alpha(theme.palette.primary.main, 0.33), + }, + "& .mdl-progress>.progressbar": { + backgroundColor: theme.palette.primary.main + " !important", + }, + }, +})); + +export interface IFirebaseUiProps { + className?: string; + uiConfig?: firebaseui.auth.Config; +} + +export default function FirebaseUi(props: IFirebaseUiProps) { + const { classes, cx } = useStyles(); + const [firebaseAuth] = useAtom(firebaseAuthAtom, globalScope); + const [publicSettings] = useAtom(publicSettingsAtom, globalScope); + + const signInOptions: typeof publicSettings.signInOptions = useMemo( + () => + Array.isArray(publicSettings.signInOptions) && + publicSettings.signInOptions.length > 0 + ? publicSettings.signInOptions + : ["google"], + [publicSettings.signInOptions] + ); + + const uiConfig: firebaseui.auth.Config = useMemo( + () => ({ + ...defaultUiConfig, + ...props.uiConfig, + signInOptions: getSignInOptions(signInOptions), + }), + [props.uiConfig, signInOptions] + ); + + useEffect(() => { + let firebaseUiWidget: firebaseui.auth.AuthUI; + let userSignedIn = false; + let unregisterAuthObserver: ReturnType; + + // Get or Create a firebaseUI instance. + firebaseUiWidget = + firebaseui.auth.AuthUI.getInstance() || + new firebaseui.auth.AuthUI(firebaseAuth); + + if (uiConfig.signInFlow === "popup") firebaseUiWidget.reset(); + + // We track the auth state to reset firebaseUi if the user signs out. + unregisterAuthObserver = onAuthStateChanged(firebaseAuth, (user) => { + if (!user && userSignedIn) firebaseUiWidget.reset(); + userSignedIn = !!user; + }); + + // Render the firebaseUi Widget. + firebaseUiWidget.start("#" + ELEMENT_ID, uiConfig); + + return () => { + unregisterAuthObserver(); + firebaseUiWidget.reset(); + }; + }, [firebaseAuth, uiConfig]); + + return ( + <> + + Continue with + + +
+ + ); +} diff --git a/src/components/FloatingSearch.tsx b/src/components/FloatingSearch.tsx index 83ddf636..3068323f 100644 --- a/src/components/FloatingSearch.tsx +++ b/src/components/FloatingSearch.tsx @@ -8,7 +8,7 @@ import { import SearchIcon from "@mui/icons-material/Search"; import SlideTransition from "@src/components/Modal/SlideTransition"; -import { APP_BAR_HEIGHT } from "@src/components/Navigation"; +import { APP_BAR_HEIGHT } from "@src/layouts/Navigation"; export interface IFloatingSearchProps extends Partial { label: string; @@ -120,6 +120,12 @@ export default function FloatingSearch({ }px)`, left: (theme) => (theme.shape.borderRadius as number) * 2, }, + + "&.Mui-disabled": { + bgcolor: "transparent", + boxShadow: "none", + "& .MuiInputAdornment-root": { color: "text.disabled" }, + }, }, }} {...props} diff --git a/src/components/FormattedChip.tsx b/src/components/FormattedChip.tsx deleted file mode 100644 index 809fe121..00000000 --- a/src/components/FormattedChip.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Chip, ChipProps } from "@mui/material"; - -export const VARIANTS = ["yes", "no", "maybe"]; -const paletteColor = { - yes: "success", - maybe: "warning", - no: "error", -} as const; - -// TODO: Create a more generalised solution for this -export default function FormattedChip(props: ChipProps) { - const label = - typeof props.label === "string" ? props.label.toLowerCase() : ""; - - if (VARIANTS.includes(label)) { - return ; - } - - return ; -} diff --git a/src/components/HelperText.tsx b/src/components/HelperText.tsx deleted file mode 100644 index 714e0255..00000000 --- a/src/components/HelperText.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useTheme } from "@mui/material"; - -export interface IHelperTextProps { - children: React.ReactNode; -} - -export default function HelperText(props: IHelperTextProps) { - const theme = useTheme(); - - return ( -
- ); -} diff --git a/src/components/Home/AccessDenied.tsx b/src/components/Home/AccessDenied.tsx deleted file mode 100644 index a718cbbd..00000000 --- a/src/components/Home/AccessDenied.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Link } from "react-router-dom"; - -import { Typography, Link as MuiLink, Button } from "@mui/material"; -import SecurityIcon from "@mui/icons-material/SecurityOutlined"; - -import EmptyState from "@src/components/EmptyState"; - -import { WIKI_LINKS } from "@src/constants/externalLinks"; -import routes from "@src/constants/routes"; -import { useAppContext } from "@src/contexts/AppContext"; - -export default function AccessDenied() { - const { currentUser } = useAppContext(); - return ( - - - You are signed in as {currentUser?.email} - - - You do not have access to this project. Please contact the project - owner. - - - If you are the project owner, please follow{" "} - - these instructions - {" "} - to set up this project’s security rules. - - - - - } - sx={{ - position: "fixed", - top: 0, - left: 0, - right: 0, - bottom: 0, - bgcolor: "background.default", - zIndex: 9999, - }} - /> - ); -} diff --git a/src/components/Home/TableGrid/TableGridSkeleton.tsx b/src/components/Home/TableGrid/TableGridSkeleton.tsx deleted file mode 100644 index ae3ec490..00000000 --- a/src/components/Home/TableGrid/TableGridSkeleton.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Container, Paper, Box, Grid } from "@mui/material"; - -import SectionHeadingSkeleton from "@src/components/SectionHeadingSkeleton"; -import TableCardSkeleton from "./TableCardSkeleton"; - -export default function TableGridSkeleton() { - return ( - - theme.breakpoints.values.sm - 48, - width: { xs: "100%", md: "50%", lg: "100%" }, - mx: "auto", - }} - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -} diff --git a/src/components/Home/TableList/TableListSkeleton.tsx b/src/components/Home/TableList/TableListSkeleton.tsx deleted file mode 100644 index 8289032d..00000000 --- a/src/components/Home/TableList/TableListSkeleton.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Container, Box, Paper } from "@mui/material"; - -import SectionHeadingSkeleton from "@src/components/SectionHeadingSkeleton"; -import TableListItemSkeleton from "./TableListItemSkeleton"; - -export default function TableGridSkeleton() { - return ( - - theme.breakpoints.values.sm - 48, - width: { xs: "100%", md: "50%", lg: "100%" }, - mx: "auto", - }} - /> - - - - - - - - - - - - - - - - - - - ); -} diff --git a/src/components/InfoTooltip.tsx b/src/components/InfoTooltip.tsx deleted file mode 100644 index 7ba74091..00000000 --- a/src/components/InfoTooltip.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { useState } from "react"; -import _merge from "lodash/merge"; - -import { Tooltip, IconButton } from "@mui/material"; -import { alpha } from "@mui/material/styles"; -import InfoIcon from "@mui/icons-material/InfoOutlined"; -import CloseIcon from "@mui/icons-material/Close"; - -export interface IInfoTooltipProps { - description: React.ReactNode; - buttonLabel?: string; - defaultOpen?: boolean; - onClose?: () => void; - - buttonProps?: Partial>; - tooltipProps?: Partial>; - iconProps?: Partial>; -} - -export default function InfoTooltip({ - description, - buttonLabel = "Info", - defaultOpen, - onClose, - - buttonProps, - tooltipProps, - iconProps, -}: IInfoTooltipProps) { - const [open, setOpen] = useState(defaultOpen || false); - - const handleClose = () => { - setOpen(false); - if (onClose) onClose(); - }; - - const toggleOpen = () => { - if (open) { - setOpen(false); - if (onClose) onClose(); - } else { - setOpen(true); - } - }; - - return ( - - {description} - - alpha("#fff", theme.palette.action.hoverOpacity), - }, - }} - color="inherit" - > - - - - } - disableFocusListener - disableHoverListener - disableTouchListener - arrow - placement="right-start" - describeChild - {...tooltipProps} - open={open} - componentsProps={_merge( - { - tooltip: { - style: { - marginLeft: "8px", - transformOrigin: "-8px 14px", - }, - sx: { - typography: "body2", - - display: "flex", - gap: 1.5, - alignItems: "flex-start", - pr: 0.5, - }, - }, - }, - tooltipProps?.componentsProps - )} - > - - {buttonProps?.children || } - - - ); -} diff --git a/src/components/KeyValueInput.tsx b/src/components/KeyValueInput.tsx deleted file mode 100644 index da043790..00000000 --- a/src/components/KeyValueInput.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { useState } from "react"; - -import { - FormControl, - FormLabel, - FormGroup, - Stack, - TextField, - Button, -} from "@mui/material"; -import AddIcon from "@mui/icons-material/Add"; -import RemoveIcon from "@mui/icons-material/DeleteOutline"; - -export interface IKeyValueInputProps { - value: Record; - onChange: (value: Record) => void; - label?: React.ReactNode; -} - -export default function KeyValueInput({ - value: valueProp, - onChange, - label, -}: IKeyValueInputProps) { - const [value, setValue] = useState( - Object.keys(valueProp).length > 0 - ? Object.keys(valueProp) - .sort() - .map((key) => [key, valueProp[key]]) - : [["", ""]] - ); - - const saveValue = (v: typeof value) => { - onChange( - v.reduce((acc, [key, value]) => { - if (key.length > 0) acc[key] = value; - return acc; - }, {} as Record) - ); - }; - - const handleAdd = (i: number) => () => - setValue((v) => { - const newValue = [...v]; - newValue.splice(i + 1, 0, ["", ""]); - setTimeout(() => - document.getElementById(`keyValue-${i + 1}-key`)?.focus() - ); - return newValue; - }); - const handleRemove = (i: number) => () => - setValue((v) => { - const newValue = [...v]; - newValue.splice(i, 1); - saveValue(newValue); - return newValue; - }); - - const handleChange = - (i: number, j: number) => (e: React.ChangeEvent) => - setValue((v) => { - const newValue = [...v]; - newValue[i][j] = e.target.value; - saveValue(newValue); - return newValue; - }); - - return ( - - - {label} - - - - {value.map(([propKey, propValue], i) => ( - - - - - - - - ))} - - - - - ); -} diff --git a/src/components/Modal/FullScreenModal.tsx b/src/components/Modal/FullScreenModal.tsx index 3a30ead7..a6a3006d 100644 --- a/src/components/Modal/FullScreenModal.tsx +++ b/src/components/Modal/FullScreenModal.tsx @@ -1,4 +1,4 @@ -import { ReactNode, useState } from "react"; +import { useState } from "react"; import { Dialog, @@ -20,9 +20,9 @@ export interface IFullScreenModalProps disableEscapeKeyDown?: boolean; "aria-labelledby": DialogProps["aria-labelledby"]; - header?: ReactNode; - children?: ReactNode; - footer?: ReactNode; + header?: React.ReactNode; + children?: React.ReactNode; + footer?: React.ReactNode; hideCloseButton?: boolean; ScrollableDialogContentProps?: Partial; diff --git a/src/components/Modal/index.tsx b/src/components/Modal/Modal.tsx similarity index 93% rename from src/components/Modal/index.tsx rename to src/components/Modal/Modal.tsx index 9ce60cee..184a02e5 100644 --- a/src/components/Modal/index.tsx +++ b/src/components/Modal/Modal.tsx @@ -1,4 +1,4 @@ -import { ReactNode, useState } from "react"; +import { useState } from "react"; import { useTheme, @@ -26,12 +26,12 @@ export interface IModalProps extends Partial> { disableBackdropClick?: boolean; disableEscapeKeyDown?: boolean; - title: ReactNode; - header?: ReactNode; - footer?: ReactNode; + title: React.ReactNode; + header?: React.ReactNode; + footer?: React.ReactNode; - children?: ReactNode; - body?: ReactNode; + children?: React.ReactNode; + body?: React.ReactNode; actions?: { primary?: Partial; @@ -94,7 +94,7 @@ export default function Modal({ ...props.sx, "& .MuiDialog-paper": { height: "100%", - ...props.sx?.["& .MuiDialog-paper"], + ...(props.sx as any)?.["& .MuiDialog-paper"], }, } : props.sx diff --git a/src/components/Modal/SlideTransition.tsx b/src/components/Modal/SlideTransition.tsx index a151847d..59c54ea9 100644 --- a/src/components/Modal/SlideTransition.tsx +++ b/src/components/Modal/SlideTransition.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import { forwardRef, cloneElement } from "react"; import { useTheme } from "@mui/material"; import { Transition } from "react-transition-group"; import { TransitionProps } from "react-transition-group/Transition"; @@ -6,7 +6,7 @@ import { TransitionProps as MuiTransitionProps } from "@mui/material/transitions export const SlideTransition: React.ForwardRefExoticComponent< Pick & React.RefAttributes -> = React.forwardRef( +> = forwardRef( ({ children, ...props }: TransitionProps, ref: React.Ref) => { const theme = useTheme(); @@ -57,8 +57,9 @@ export const SlideTransition: React.ForwardRefExoticComponent< {...props} > {(state) => - React.cloneElement(children as any, { + cloneElement(children as any, { style: { ...defaultStyle, ...transitionStyles[state] }, + tabIndex: -1, ref, }) } @@ -69,7 +70,7 @@ export const SlideTransition: React.ForwardRefExoticComponent< export default SlideTransition; -export const SlideTransitionMui = React.forwardRef(function Transition( +export const SlideTransitionMui = forwardRef(function Transition( props: MuiTransitionProps & { children?: React.ReactElement }, ref: React.Ref ) { diff --git a/src/components/Modal/index.ts b/src/components/Modal/index.ts new file mode 100644 index 00000000..7f774beb --- /dev/null +++ b/src/components/Modal/index.ts @@ -0,0 +1,2 @@ +export * from "./Modal"; +export { default } from "./Modal"; diff --git a/src/components/Navigation/Breadcrumbs.tsx b/src/components/Navigation/Breadcrumbs.tsx deleted file mode 100644 index fd112b53..00000000 --- a/src/components/Navigation/Breadcrumbs.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import { useState } from "react"; -import _find from "lodash/find"; -import queryString from "query-string"; -import { Link as RouterLink } from "react-router-dom"; -import _camelCase from "lodash/camelCase"; -import { useAtom } from "jotai"; -import { atomWithStorage } from "jotai/utils"; - -import { - Breadcrumbs as MuiBreadcrumbs, - BreadcrumbsProps, - Link, - Typography, - Tooltip, -} from "@mui/material"; -import ArrowRightIcon from "@mui/icons-material/ChevronRight"; -import ReadOnlyIcon from "@mui/icons-material/EditOffOutlined"; - -import InfoTooltip from "@src/components/InfoTooltip"; -import RenderedMarkdown from "@src/components/RenderedMarkdown"; -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import useRouter from "@src/hooks/useRouter"; -import routes from "@src/constants/routes"; - -const tableDescriptionDismissedAtom = atomWithStorage( - "tableDescriptionDismissed", - [] -); - -export default function Breadcrumbs({ sx = [], ...props }: BreadcrumbsProps) { - const { userClaims } = useAppContext(); - const { tables, table, tableState } = useProjectContext(); - const id = tableState?.config.id || ""; - const collection = id || tableState?.tablePath || ""; - - const router = useRouter(); - let parentLabel = decodeURIComponent( - queryString.parse(router.location.search).parentLabel as string - ); - if (parentLabel === "undefined") parentLabel = ""; - - const breadcrumbs = collection.split("/"); - - const section = table?.section || ""; - const getLabel = (id: string) => _find(tables, ["id", id])?.name || id; - - const [dismissed, setDismissed] = useAtom(tableDescriptionDismissedAtom); - - return ( - } - aria-label="Sub-table breadcrumbs" - {...props} - sx={[ - { - "& .MuiBreadcrumbs-ol": { - userSelect: "none", - flexWrap: "nowrap", - whiteSpace: "nowrap", - }, - }, - ...(Array.isArray(sx) ? sx : [sx]), - ]} - > - {/* Section name */} - {section && ( - - {section} - - )} - - {breadcrumbs.map((crumb: string, index) => { - // If it’s the first breadcrumb, show with specific style - const crumbProps = { - key: index, - variant: "h6", - component: index === 0 ? "h1" : "div", - color: - index === breadcrumbs.length - 1 ? "textPrimary" : "textSecondary", - } as const; - - // If it’s the last crumb, just show the label without linking - if (index === breadcrumbs.length - 1) - return ( -
- - {getLabel(crumb) || crumb.replace(/([A-Z])/g, " $1")} - - {crumb === table?.id && table?.readOnly && ( - - - - )} - - {crumb === table?.id && table?.description && ( - - -
- } - buttonLabel="Table info" - tooltipProps={{ - componentsProps: { - popper: { sx: { zIndex: "appBar" } }, - tooltip: { sx: { maxWidth: "75vw" } }, - } as any, - }} - defaultOpen={!dismissed.includes(table?.id)} - onClose={() => setDismissed((d) => [...d, table?.id])} - /> - )} -
- ); - - // If odd: breadcrumb points to a document — link to rowRef - // TODO: show a picker here to switch between sub tables - if (index % 2 === 1) - return ( - - {getLabel( - parentLabel.split(",")[Math.ceil(index / 2) - 1] || crumb - )} - - ); - - // Otherwise, even: breadcrumb points to a Firestore collection - return ( - - {getLabel(crumb) || crumb.replace(/([A-Z])/g, " $1")} - - ); - })} - - ); -} diff --git a/src/components/Navigation/NavTableSection.tsx b/src/components/Navigation/NavTableSection.tsx deleted file mode 100644 index 3f733358..00000000 --- a/src/components/Navigation/NavTableSection.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useState } from "react"; -import { useLocation } from "react-router-dom"; - -import { List, ListItemText, Collapse } from "@mui/material"; -import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; -import NavItem from "./NavItem"; - -import { Table } from "@src/contexts/ProjectContext"; -import { routes } from "@src/constants/routes"; - -export interface INavDrawerItemProps { - open?: boolean; - section: string; - tables: Table[]; - currentSection?: string; - closeDrawer?: (e: {}) => void; -} - -export default function NavDrawerItem({ - open: openProp, - section, - tables, - currentSection, - closeDrawer, -}: INavDrawerItemProps) { - const { pathname } = useLocation(); - const [open, setOpen] = useState(openProp || section === currentSection); - - return ( -
  • - setOpen((o) => !o)} - > - - - theme.transitions.create("transform"), - }} - /> - - - - - {tables - .filter((x) => x) - .map((table) => { - const route = - table.tableType === "collectionGroup" - ? `${routes.tableGroup}/${table.id}` - : `${routes.table}/${table.id.replace(/\//g, "~2F")}`; - - return ( -
  • - - `calc(100% - ${theme.spacing(2 + 0.5)})`, - }} - > - - -
  • - ); - })} - - - - ); -} diff --git a/src/components/Navigation/Notifications/index.tsx b/src/components/Navigation/Notifications/index.tsx deleted file mode 100644 index 162e2a3e..00000000 --- a/src/components/Navigation/Notifications/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import React from "react"; -import { - IconButton, - Popover, - List, - ListItemAvatar, - ListItem, - Avatar, - ListItemText, - ListItemSecondaryAction, - Badge, -} from "@mui/material"; - -import { makeStyles, createStyles } from "@mui/styles"; - -import ErrorIcon from "@mui/icons-material/Error"; -import DeleteIcon from "@mui/icons-material/Delete"; - -import BellIcon from "@mui/icons-material/Notifications"; - -const useStyles = makeStyles((theme) => - createStyles({ - typography: { - padding: theme.spacing(2), - }, - }) -); - -type Notification = { - title: string; - subtitle: string; - link?: string; - variant: "error" | "success" | "info" | "warning"; -}; - -const Notification = () => { - const classes = useStyles(); - const [anchorEl, setAnchorEl] = React.useState( - null - ); - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - - const handleClose = () => { - setAnchorEl(null); - }; - - const open = Boolean(anchorEl); - const id = open ? "simple-popover" : undefined; - - const notifications: Notification[] = [ - { - title: "a", - subtitle: "a", - variant: "error", - link: "https://console.cloud.google.com/cloud-build/builds;region=global/ID", - }, - ]; - - const notificationsCount = notifications.length; - return ( - <> - - - - - - - - {notifications.map((notification) => ( - - - - - - - - - - - - - - ))} - - - - ); -}; -export default Notification; diff --git a/src/components/RenderedHtml.tsx b/src/components/RenderedHtml.tsx deleted file mode 100644 index a88f7f4e..00000000 --- a/src/components/RenderedHtml.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import DOMPurify from "dompurify"; -import clsx from "clsx"; - -import { makeStyles, createStyles } from "@mui/styles"; - -const useStyles = makeStyles((theme) => - createStyles({ - root: { - maxWidth: "33em", - ...theme.typography.body2, - - "& * + *": { - marginTop: "1em !important", - }, - - "& h1, & h2, & h3, & h4, & h5, & h6": { - fontFamily: theme.typography.fontFamily, - margin: 0, - lineHeight: 1.2, - fontWeight: "bold", - }, - "& p": { - margin: 0, - marginTop: "inherit", - }, - - "& a": { - color: theme.palette.primary.main, - textDecoration: "underline", - }, - - "& ul, & ol": { - margin: 0, - paddingLeft: "1.5em", - }, - "& li + li": { - marginTop: "0.5em", - }, - - "& table": { - borderCollapse: "collapse", - }, - - "& table th, & table td": { - border: `1px solid ${theme.palette.divider}`, - padding: "0.4rem", - }, - "& figure": { - display: "table", - margin: "1rem auto", - }, - "& figure figcaption": { - color: "#999", - display: "block", - marginTop: "0.25rem", - textAlign: "center", - }, - "& hr": { - borderColor: `1px solid ${theme.palette.divider}`, - borderWidth: "1px 0 0 0", - }, - "& code": { - backgroundColor: "#e8e8e8", - borderRadius: theme.shape.borderRadius, - padding: "0.1rem 0.2rem", - fontFamily: theme.typography.fontFamilyMono, - }, - "& pre": { - fontFamily: theme.typography.fontFamilyMono, - }, - '& .mceContent-body:not([dir="rtl"]) blockquote': { - borderLeft: `2px solid ${theme.palette.divider}`, - marginLeft: "1.5rem", - paddingLeft: "1rem", - }, - '& .mceContent-body[dir="rtl"] blockquote': { - borderRight: `2px solid ${theme.palette.divider}`, - marginRight: "1.5rem", - paddingRight: "1rem", - }, - }, - }) -); - -export interface IRenderedHtmlProps - extends React.DetailedHTMLProps< - React.HTMLAttributes, - HTMLDivElement - > { - html: string; -} - -export default function RenderedHtml({ - html, - className, - ...props -}: IRenderedHtmlProps) { - const classes = useStyles(); - - return ( -
    - ); -} diff --git a/src/components/RenderedMarkdown.tsx b/src/components/RenderedMarkdown.tsx index 964739ae..861a808c 100644 --- a/src/components/RenderedMarkdown.tsx +++ b/src/components/RenderedMarkdown.tsx @@ -5,12 +5,12 @@ import remarkGfm from "remark-gfm"; import { Typography, Link } from "@mui/material"; const remarkPlugins = [remarkGfm]; -const components = { +const components: ReactMarkdownOptions["components"] = { a: (props) => , p: Typography, // eslint-disable-next-line jsx-a11y/alt-text img: (props) => ( - + ), }; @@ -29,7 +29,9 @@ export default function RenderedMarkdown({ return ( - createStyles({ - "@global": { - body: { - fontFamily: theme.typography.fontFamily + " !important", - }, - }, - - root: { - "& .tox": { - "&.tox-tinymce": { - borderRadius: theme.shape.borderRadius, - border: "none", - - backgroundColor: theme.palette.action.input, - boxShadow: `0 -1px 0 0 ${theme.palette.text.disabled} inset, - 0 0 0 1px ${theme.palette.action.inputOutline} inset`, - transition: theme.transitions.create("box-shadow", { - duration: theme.transitions.duration.short, - }), - - "&:hover": { - boxShadow: `0 -1px 0 0 ${theme.palette.text.primary} inset, - 0 0 0 1px ${theme.palette.action.inputOutline} inset`, - }, - }, - - "& .tox-toolbar-overlord, & .tox-edit-area__iframe, & .tox-toolbar__primary": - { - background: "transparent", - borderRadius: theme.shape.borderRadius, - }, - "& .tox-edit-area__iframe": { colorScheme: "auto" }, - - "& .tox-toolbar__group": { border: "none !important" }, - - "& .tox-tbtn": { - borderRadius: theme.shape.borderRadius, - color: theme.palette.text.secondary, - cursor: "pointer", - margin: 0, - - transition: theme.transitions.create(["color", "background-color"], { - duration: theme.transitions.duration.shortest, - }), - - "&:hover": { - color: theme.palette.text.primary, - backgroundColor: "transparent", - }, - - "& svg": { fill: "currentColor" }, - }, - - "& .tox-tbtn--enabled, & .tox-tbtn--enabled:hover": { - backgroundColor: theme.palette.action.selected + " !important", - color: theme.palette.text.primary, - }, - }, - }, - - focus: { - "& .tox.tox-tinymce, & .tox.tox-tinymce:hover": { - boxShadow: `0 -2px 0 0 ${theme.palette.primary.main} inset, - 0 0 0 1px ${theme.palette.action.inputOutline} inset`, - }, - }, - - disabled: { - "& .tox.tox-tinymce, & .tox.tox-tinymce:hover": { - backgroundColor: - theme.palette.mode === "dark" - ? "transparent" - : theme.palette.action.disabledBackground, - }, - }, - }) -); - -export interface IRichTextEditorProps { - value?: string; - onChange: (value: string) => void; - disabled?: boolean; - id: string; -} - -export default function RichTextEditor({ - value, - onChange, - disabled, - id, -}: IRichTextEditorProps) { - const classes = useStyles(); - const theme = useTheme(); - const [focus, setFocus] = useState(false); - - return ( -
    - setFocus(true)} - onBlur={() => setFocus(false)} - /> -
    - ); -} diff --git a/src/components/RichTooltip.tsx b/src/components/RichTooltip.tsx deleted file mode 100644 index b699efe1..00000000 --- a/src/components/RichTooltip.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import React, { useState } from "react"; -import clsx from "clsx"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { - Tooltip, - TooltipProps, - Typography, - Button, - ButtonProps, -} from "@mui/material"; - -import { colord, extend } from "colord"; -import mixPlugin from "colord/plugins/lch"; -extend([mixPlugin]); - -const useStyles = makeStyles((theme) => - createStyles({ - popper: { - zIndex: theme.zIndex.drawer - 1, - }, - - tooltip: { - backgroundColor: - theme.palette.mode === "light" - ? theme.palette.background.default - : colord(theme.palette.background.paper) - .mix("#fff", 0.16) - .toHslString(), - boxShadow: theme.shadows[8], - - ...theme.typography.body2, - color: theme.palette.text.primary, - padding: 0, - }, - - arrow: { - "&::before": { - backgroundColor: - theme.palette.mode === "light" - ? theme.palette.background.default - : colord(theme.palette.background.paper) - .mix("#fff", 0.16) - .toHslString(), - boxShadow: theme.shadows[8], - }, - }, - - grid: { - padding: theme.spacing(2), - cursor: "default", - - display: "grid", - gridTemplateColumns: "48px auto", - gap: theme.spacing(1, 1.5), - }, - icon: { - marginTop: theme.spacing(-0.5), - fontSize: `${48 / 16}rem`, - }, - message: { - alignSelf: "center", - }, - dismissButton: { - gridColumn: 2, - justifySelf: "flex-start", - }, - }) -); - -export interface IRichTooltipProps - extends Partial> { - render: (props: { - openTooltip: () => void; - closeTooltip: () => void; - toggleTooltip: () => void; - }) => TooltipProps["children"]; - - icon?: React.ReactNode; - title: React.ReactNode; - message?: React.ReactNode; - dismissButtonText?: React.ReactNode; - dismissButtonProps?: Partial; - defaultOpen?: boolean; - onOpen?: () => void; - onClose?: () => void; - onToggle?: (state: boolean) => void; -} - -export default function RichTooltip({ - render, - icon, - title, - message, - dismissButtonText, - dismissButtonProps, - defaultOpen, - onOpen, - onClose, - onToggle, - ...props -}: IRichTooltipProps) { - const classes = useStyles(); - const [open, setOpen] = useState(defaultOpen || false); - - const openTooltip = () => { - setOpen(true); - if (onOpen) onOpen(); - }; - const closeTooltip = () => { - setOpen(false); - if (onClose) onClose(); - }; - const toggleTooltip = () => - setOpen((state) => { - if (onToggle) onToggle(!state); - return !state; - }); - - return ( - - {icon} - -
    - - {title} - - {message} -
    - - {dismissButtonText ? ( - - ) : ( - - Click to dismiss - - )} -
    - } - PopperProps={{ - modifiers: [ - { - name: "preventOverflow", - enabled: true, - options: { - altAxis: true, - altBoundary: true, - tether: false, - rootBoundary: "document", - padding: 8, - }, - }, - ], - }} - {...props} - > - {render({ openTooltip, closeTooltip, toggleTooltip })} - - ); -} diff --git a/src/components/RowyRunModal.tsx b/src/components/RowyRunModal.tsx index e48fce1f..fb2757ad 100644 --- a/src/components/RowyRunModal.tsx +++ b/src/components/RowyRunModal.tsx @@ -1,6 +1,5 @@ import { Link } from "react-router-dom"; import { useAtom } from "jotai"; -import { rowyRunModalAtom } from "@src/atoms/RowyRunModal"; import { Typography, @@ -13,23 +12,35 @@ import Modal from "@src/components/Modal"; import Logo from "@src/assets/LogoRowyRun"; import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; -import { useAppContext } from "@src/contexts/AppContext"; -import { routes } from "@src/constants/routes"; +import { + globalScope, + userRolesAtom, + projectSettingsAtom, + rowyRunModalAtom, +} from "@src/atoms/globalScope"; +import { ROUTES } from "@src/constants/routes"; import { WIKI_LINKS } from "@src/constants/externalLinks"; -import { useProjectContext } from "@src/contexts/ProjectContext"; +/** + * Display a modal asking the user to deploy or upgrade Rowy Run + * using `rowyRunModalAtom` in `globalState` + * {@link rowyRunModalAtom | See usage example} + */ export default function RowyRunModal() { - const { userRoles } = useAppContext(); - const { settings } = useProjectContext(); + const [userRoles] = useAtom(userRolesAtom, globalScope); + const [projectSettings] = useAtom(projectSettingsAtom, globalScope); + const [rowyRunModal, setRowyRunModal] = useAtom( + rowyRunModalAtom, + globalScope + ); - const [state, setState] = useAtom(rowyRunModalAtom); - const handleClose = () => setState((s) => ({ ...s, open: false })); + const handleClose = () => setRowyRunModal({ ...rowyRunModal, open: false }); - const showUpdateModal = state.version && settings?.rowyRunUrl; + const showUpdateModal = rowyRunModal.version && projectSettings?.rowyRunUrl; return ( {showUpdateModal ? "Update" : "Set up"} Rowy Run to use{" "} - {state.feature || "this feature"} + {rowyRunModal.feature || "this feature"} {showUpdateModal && ( - {state.feature || "This feature"} requires Rowy Run v - {state.version} or later. + {rowyRunModal.feature || "This feature"} requires Rowy Run v + {rowyRunModal.version} or later. )} @@ -73,7 +84,7 @@ export default function RowyRunModal() { diff --git a/src/components/Settings/UserSettings/Personalization.tsx b/src/components/Settings/UserSettings/Personalization.tsx index 8d9da6f5..f6f2fc2c 100644 --- a/src/components/Settings/UserSettings/Personalization.tsx +++ b/src/components/Settings/UserSettings/Personalization.tsx @@ -1,26 +1,27 @@ import { lazy, Suspense, useState } from "react"; import { IUserSettingsChildProps } from "@src/pages/Settings/UserSettings"; -import _merge from "lodash/merge"; -import _unset from "lodash/unset"; +import { merge, unset } from "lodash-es"; import { FormControlLabel, Checkbox, Collapse } from "@mui/material"; import Loading from "@src/components/Loading"; // prettier-ignore -const ThemeColorPicker = lazy(() => import("@src/components/Settings/ThemeColorPicker") /* webpackChunkName: "Settings/ThemeColorPicker" */); +const ThemeColorPicker = lazy(() => import("@src/components/Settings/ThemeColorPicker") /* webpackChunkName: "ThemeColorPicker" */); export default function Personalization({ settings, updateSettings, }: IUserSettingsChildProps) { const [customizedThemeColor, setCustomizedThemeColor] = useState( - settings.theme?.light?.palette?.primary?.main || - settings.theme?.dark?.palette?.primary?.main + Boolean( + settings.theme?.light?.palette?.primary?.main || + settings.theme?.dark?.palette?.primary?.main + ) ); const handleSave = ({ light, dark }: { light: string; dark: string }) => { updateSettings({ - theme: _merge(settings.theme, { + theme: merge(settings.theme, { light: { palette: { primary: { main: light } } }, dark: { palette: { primary: { main: dark } } }, }), @@ -32,13 +33,13 @@ export default function Personalization({ { setCustomizedThemeColor(e.target.checked); if (!e.target.checked) { const newTheme = settings.theme; - _unset(newTheme, "light.palette.primary.main"); - _unset(newTheme, "dark.palette.primary.main"); + unset(newTheme, "light.palette.primary.main"); + unset(newTheme, "dark.palette.primary.main"); updateSettings({ theme: newTheme }); } }} @@ -49,7 +50,7 @@ export default function Personalization({ /> - }> + }> - + Theme { updateSettings({ - theme: _merge(settings.theme, { + theme: merge(settings.theme, { dark: { palette: { darker: e.target.checked } }, }), }); diff --git a/src/components/Setup/SetupLayout.tsx b/src/components/Setup/SetupLayout.tsx index 1236b350..9d7a6b18 100644 --- a/src/components/Setup/SetupLayout.tsx +++ b/src/components/Setup/SetupLayout.tsx @@ -1,7 +1,7 @@ import React, { useState, createElement } from "react"; import { use100vh } from "react-div-100vh"; import { SwitchTransition } from "react-transition-group"; -import type { ISetupStep } from "./types"; +import type { ISetupStep } from "./SetupStep"; import { useMediaQuery, @@ -25,7 +25,7 @@ import Logo from "@src/assets/Logo"; import ScrollableDialogContent from "@src/components/Modal/ScrollableDialogContent"; import { SlideTransition } from "@src/components/Modal/SlideTransition"; -import { analytics } from "analytics"; +import { analytics, logEvent } from "@src/analytics"; const BASE_WIDTH = 1024; @@ -73,7 +73,7 @@ export default function SetupLayout({ } const nextStepId = steps[nextIncompleteStepIndex].id; - analytics.logEvent("setup_step", { step: nextStepId }); + logEvent(analytics, "setup_step", { step: nextStepId }); setStepId(nextStepId); }; diff --git a/src/components/Setup/types.d.ts b/src/components/Setup/SetupStep.d.ts similarity index 100% rename from src/components/Setup/types.d.ts rename to src/components/Setup/SetupStep.d.ts diff --git a/src/components/Setup/SignInWithGoogle.tsx b/src/components/Setup/SignInWithGoogle.tsx index ff7369eb..e9dfe87f 100644 --- a/src/components/Setup/SignInWithGoogle.tsx +++ b/src/components/Setup/SignInWithGoogle.tsx @@ -1,9 +1,15 @@ import { useState } from "react"; +import { useAtom } from "jotai"; +import { signInWithPopup, GoogleAuthProvider, signOut } from "firebase/auth"; import { Typography } from "@mui/material"; import LoadingButton, { LoadingButtonProps } from "@mui/lab/LoadingButton"; -import { auth, googleProvider } from "@src/firebase"; +import { globalScope } from "@src/atoms/globalScope"; +import { firebaseAuthAtom } from "@src/sources/ProjectSourceFirebase"; + +const googleProvider = new GoogleAuthProvider(); +googleProvider.setCustomParameters({ prompt: "select_account" }); export interface ISignInWithGoogleProps extends Partial { matchEmail?: string; @@ -13,12 +19,13 @@ export default function SignInWithGoogle({ matchEmail, ...props }: ISignInWithGoogleProps) { + const [firebaseAuth] = useAtom(firebaseAuthAtom, globalScope); const [status, setStatus] = useState<"IDLE" | "LOADING" | string>("IDLE"); const handleSignIn = async () => { setStatus("LOADING"); try { - const result = await auth.signInWithPopup(googleProvider); + const result = await signInWithPopup(firebaseAuth, googleProvider); if (!result.user) throw new Error("Missing user"); if ( matchEmail && @@ -28,7 +35,7 @@ export default function SignInWithGoogle({ setStatus("IDLE"); } catch (error: any) { - if (auth.currentUser) auth.signOut(); + if (firebaseAuth.currentUser) signOut(firebaseAuth); console.log(error); setStatus(error.message); } diff --git a/src/components/Setup/Steps/StepFinish.tsx b/src/components/Setup/Steps/StepFinish.tsx index 24ab4f67..b5ee5c10 100644 --- a/src/components/Setup/Steps/StepFinish.tsx +++ b/src/components/Setup/Steps/StepFinish.tsx @@ -1,17 +1,28 @@ import { useState, useEffect } from "react"; +import { useAtom } from "jotai"; import { useSnackbar } from "notistack"; import { Link } from "react-router-dom"; -import type { ISetupStep } from "../types"; +import { doc, updateDoc } from "firebase/firestore"; +import type { ISetupStep } from "@src/components/Setup/SetupStep"; -import { Typography, Stack, RadioGroup, Radio, Button } from "@mui/material"; +import { + Typography, + Stack, + RadioGroup, + RadioGroupProps, + Radio, + Button, +} from "@mui/material"; import ThumbUpIcon from "@mui/icons-material/ThumbUpAlt"; import ThumbUpOffIcon from "@mui/icons-material/ThumbUpOffAlt"; import ThumbDownIcon from "@mui/icons-material/ThumbDownAlt"; import ThumbDownOffIcon from "@mui/icons-material/ThumbDownOffAlt"; -import { analytics } from "analytics"; -import { db } from "@src/firebase"; -import { routes } from "@src/constants/routes"; +import { analytics, logEvent } from "@src/analytics"; +import { globalScope } from "@src/atoms/globalScope"; +import { firebaseDbAtom } from "@src/sources/ProjectSourceFirebase"; +import { ROUTES } from "@src/constants/routes"; +import { SETTINGS } from "config/dbPaths"; export default { id: "finish", @@ -24,16 +35,17 @@ export default { } as ISetupStep; function StepFinish() { + const [firebaseDb] = useAtom(firebaseDbAtom, globalScope); const { enqueueSnackbar } = useSnackbar(); useEffect(() => { - db.doc("_rowy_/settings").update({ setupCompleted: true }); - }, []); + updateDoc(doc(firebaseDb, SETTINGS), { setupCompleted: true }); + }, [firebaseDb]); const [rating, setRating] = useState<"up" | "down" | undefined>(); - const handleRate = (e) => { - setRating(e.target.value); - analytics.logEvent("setup_rating", { rating: e.target.value }); + const handleRate: RadioGroupProps["onChange"] = (e) => { + setRating(e.target.value as typeof rating); + logEvent(analytics, "setup_rating", { rating: e.target.value }); enqueueSnackbar("Thanks for your feedback!"); }; @@ -80,7 +92,7 @@ function StepFinish() { color="primary" size="large" component={Link} - to={routes.auth} + to={ROUTES.auth} > Sign in to your Rowy project diff --git a/src/components/Setup/Steps/StepRules.tsx b/src/components/Setup/Steps/StepRules.tsx index 8a70af32..3b963d76 100644 --- a/src/components/Setup/Steps/StepRules.tsx +++ b/src/components/Setup/Steps/StepRules.tsx @@ -1,6 +1,10 @@ import { useState } from "react"; +import { useAtom } from "jotai"; import { useSnackbar } from "notistack"; -import type { ISetupStep, ISetupStepBodyProps } from "../types"; +import type { + ISetupStep, + ISetupStepBodyProps, +} from "@src/components/Setup/SetupStep"; import { Typography, @@ -13,9 +17,9 @@ import CopyIcon from "@src/assets/icons/Copy"; import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; import DoneIcon from "@mui/icons-material/Done"; -import SetupItem from "../SetupItem"; +import SetupItem from "@src/components/Setup/SetupItem"; -import { useAppContext } from "@src/contexts/AppContext"; +import { globalScope, projectIdAtom } from "@src/atoms/globalScope"; import { CONFIG } from "@src/config/dbPaths"; import { RULES_START, @@ -40,7 +44,7 @@ export default { } as ISetupStep; function StepRules({ isComplete, setComplete }: ISetupStepBodyProps) { - const { projectId } = useAppContext(); + const [projectId] = useAtom(projectIdAtom, globalScope); const { enqueueSnackbar } = useSnackbar(); const [adminRule, setAdminRule] = useState(true); diff --git a/src/components/Setup/Steps/StepStorageRules.tsx b/src/components/Setup/Steps/StepStorageRules.tsx index f1a91675..c4f2dff2 100644 --- a/src/components/Setup/Steps/StepStorageRules.tsx +++ b/src/components/Setup/Steps/StepStorageRules.tsx @@ -1,14 +1,18 @@ +import { useAtom } from "jotai"; import { useSnackbar } from "notistack"; -import type { ISetupStep, ISetupStepBodyProps } from "../types"; +import type { + ISetupStep, + ISetupStepBodyProps, +} from "@src/components/Setup/SetupStep"; import { Typography, Button, Grid } from "@mui/material"; import CopyIcon from "@src/assets/icons/Copy"; import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; import DoneIcon from "@mui/icons-material/Done"; -import SetupItem from "../SetupItem"; +import SetupItem from "@src/components/Setup/SetupItem"; -import { useAppContext } from "@src/contexts/AppContext"; +import { globalScope, projectIdAtom } from "@src/atoms/globalScope"; import { RULES_START, RULES_END, @@ -27,7 +31,7 @@ export default { const rules = RULES_START + REQUIRED_RULES + RULES_END; function StepStorageRules({ isComplete, setComplete }: ISetupStepBodyProps) { - const { projectId } = useAppContext(); + const [projectId] = useAtom(projectIdAtom, globalScope); const { enqueueSnackbar } = useSnackbar(); return ( diff --git a/src/components/Setup/Steps/StepWelcome.tsx b/src/components/Setup/Steps/StepWelcome.tsx index 42a725b3..dfabf8e8 100644 --- a/src/components/Setup/Steps/StepWelcome.tsx +++ b/src/components/Setup/Steps/StepWelcome.tsx @@ -1,4 +1,8 @@ -import type { ISetupStep, ISetupStepBodyProps } from "../types"; +import { useAtom } from "jotai"; +import type { + ISetupStep, + ISetupStepBodyProps, +} from "@src/components/Setup/SetupStep"; import { FormControlLabel, @@ -9,7 +13,7 @@ import { } from "@mui/material"; import { EXTERNAL_LINKS } from "@src/constants/externalLinks"; -import { useAppContext } from "@src/contexts/AppContext"; +import { globalScope, projectIdAtom } from "@src/atoms/globalScope"; export default { id: "welcome", @@ -29,7 +33,7 @@ export default { } as ISetupStep; function StepWelcome({ isComplete, setComplete }: ISetupStepBodyProps) { - const { projectId } = useAppContext(); + const [projectId] = useAtom(projectIdAtom, globalScope); return ( <> diff --git a/src/components/SideDrawer/Form/Autosave.tsx b/src/components/SideDrawer/Form/Autosave.tsx deleted file mode 100644 index bd69748e..00000000 --- a/src/components/SideDrawer/Form/Autosave.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { useEffect } from "react"; -import { useDebounce } from "use-debounce"; -import _isEqual from "lodash/isEqual"; -import _pick from "lodash/pick"; -import _pickBy from "lodash/pickBy"; - -import { Control, UseFormReturn, useWatch } from "react-hook-form"; -import { Values } from "./utils"; - -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { TableState } from "@src/hooks/useTable"; - -export interface IAutosaveProps { - control: Control; - docRef: firebase.default.firestore.DocumentReference; - row: any; - reset: UseFormReturn["reset"]; - dirtyFields: UseFormReturn["formState"]["dirtyFields"]; -} - -const getEditables = (values: Values, tableState?: TableState) => - _pick( - values, - (tableState && - (Array.isArray(tableState?.columns) - ? tableState?.columns - : Object.values(tableState?.columns) - ).map((c) => c.key)) ?? - [] - ); - -export default function Autosave({ - control, - docRef, - row, - reset, - dirtyFields, -}: IAutosaveProps) { - const { tableState, updateCell } = useProjectContext(); - - const values = useWatch({ control }); - const [debouncedValue] = useDebounce(getEditables(values, tableState), 1000, { - equalityFn: _isEqual, - }); - - useEffect(() => { - if (!row || !row.ref) return; - if (row.ref.id !== docRef.id) return; - if (!updateCell) return; - - // Get only fields that have had their value updated by the user - const updatedValues = _pickBy( - _pickBy(debouncedValue, (_, key) => dirtyFields[key]), - (value, key) => !_isEqual(value, row[key]) - ); - if (Object.keys(updatedValues).length === 0) return; - - // Update the document - Object.entries(updatedValues).forEach(([key, value]) => - updateCell( - row.ref, - key, - value, - // After the cell is updated, set this field to be not dirty - // so it doesn’t get updated again when a different field in the form - // is updated + make sure the new value is kept after reset - () => reset({ ...values, [key]: value }) - ) - ); - }, [debouncedValue]); - - return null; -} diff --git a/src/components/SideDrawer/Form/FieldSkeleton.tsx b/src/components/SideDrawer/Form/FieldSkeleton.tsx deleted file mode 100644 index e85931cc..00000000 --- a/src/components/SideDrawer/Form/FieldSkeleton.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Skeleton, SkeletonProps } from "@mui/material"; - -export default function FieldSkeleton(props: SkeletonProps) { - return ( - - ); -} diff --git a/src/components/SideDrawer/Form/FieldWrapper.tsx b/src/components/SideDrawer/Form/FieldWrapper.tsx deleted file mode 100644 index a6952631..00000000 --- a/src/components/SideDrawer/Form/FieldWrapper.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { Suspense } from "react"; - -import { Stack, InputLabel, Typography, IconButton } from "@mui/material"; -import DocumentPathIcon from "@src/assets/icons/DocumentPath"; -import LaunchIcon from "@mui/icons-material/Launch"; -import LockIcon from "@mui/icons-material/LockOutlined"; - -import ErrorBoundary from "@src/components/ErrorBoundary"; -import FieldSkeleton from "./FieldSkeleton"; - -import { FieldType } from "@src/constants/fields"; -import { getFieldProp } from "@src/components/fields"; -import { useAppContext } from "@src/contexts/AppContext"; - -export interface IFieldWrapperProps { - children?: React.ReactNode; - type: FieldType | "debug"; - name?: string; - label?: React.ReactNode; - debugText?: React.ReactNode; - disabled?: boolean; -} - -export default function FieldWrapper({ - children, - type, - name, - label, - debugText, - disabled, -}: IFieldWrapperProps) { - const { projectId } = useAppContext(); - - return ( -
    - - {type === "debug" ? : getFieldProp("icon", type)} - - {label} - - {disabled && } - - - - }> - {children ?? - (!debugText && ( - - This field cannot be edited here. - - ))} - - - - {debugText && ( - - - {debugText} - - - - - - - )} -
    - ); -} diff --git a/src/components/SideDrawer/Form/Label.tsx b/src/components/SideDrawer/Form/Label.tsx deleted file mode 100644 index f6452a75..00000000 --- a/src/components/SideDrawer/Form/Label.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { makeStyles, createStyles } from "@mui/styles"; -import { FormLabel, FormLabelProps, Tooltip, IconButton } from "@mui/material"; -import HelpIcon from "@mui/icons-material/HelpOutline"; - -const useStyles = makeStyles((theme) => - createStyles({ - root: { - display: "block", - marginBottom: theme.spacing(1), - }, - }) -); - -export interface ILabelProps extends FormLabelProps { - label?: React.ReactNode; - hint?: React.ReactNode; -} - -export default function Label({ - label, - children, - hint, - ...props -}: ILabelProps) { - const classes = useStyles(); - - return ( - - {label || children} - - {hint && ( - - - - - - )} - - ); -} diff --git a/src/components/SideDrawer/Form/Reset.tsx b/src/components/SideDrawer/Form/Reset.tsx deleted file mode 100644 index fd75d038..00000000 --- a/src/components/SideDrawer/Form/Reset.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { useEffect } from "react"; -import { UseFormReturn } from "react-hook-form"; -import _pickBy from "lodash/pickBy"; -import _isEqual from "lodash/isEqual"; - -import { Values } from "./utils"; - -export interface IResetProps { - defaultValues: Values; - dirtyFields: UseFormReturn["formState"]["dirtyFields"]; - reset: UseFormReturn["reset"]; - getValues: UseFormReturn["getValues"]; -} - -/** - * Reset the form’s values and errors when the Firestore doc’s data updates - */ -export default function Reset({ - defaultValues, - dirtyFields, - reset, - getValues, -}: IResetProps) { - useEffect( - () => { - const resetValues = { ...defaultValues }; - const currentValues = getValues(); - - // If the field is dirty, (i.e. the user input a value but it hasn’t been) - // saved to the db yet, keep its current value and keep it marked as dirty - for (const [field, isDirty] of Object.entries(dirtyFields)) { - if (isDirty) { - resetValues[field] = currentValues[field]; - } - } - - // Compare currentValues to resetValues - const diff = _pickBy(getValues(), (v, k) => !_isEqual(v, resetValues[k])); - // Reset if needed & keep the current dirty fields - if (Object.keys(diff).length > 0) { - reset(resetValues, { keepDirty: true }); - } - }, - // `defaultValues` is the `initialValue` of each field type + - // the current value in the Firestore doc - [JSON.stringify(defaultValues)] - ); - - return null; -} diff --git a/src/components/SideDrawer/Form/index.tsx b/src/components/SideDrawer/Form/index.tsx deleted file mode 100644 index 2236bd7f..00000000 --- a/src/components/SideDrawer/Form/index.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { createElement, useEffect } from "react"; -import { useForm } from "react-hook-form"; -import _sortBy from "lodash/sortBy"; -import _isEmpty from "lodash/isEmpty"; -import _set from "lodash/set"; -import createPersistedState from "use-persisted-state"; - -import { Stack, FormControlLabel, Switch } from "@mui/material"; - -import { Values } from "./utils"; -import { getFieldProp } from "@src/components/fields"; -import { IFieldConfig } from "@src/components/fields/types"; -import Autosave from "./Autosave"; -import Reset from "./Reset"; -import FieldWrapper from "./FieldWrapper"; - -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { sanitizeFirestoreRefs } from "@src/utils/fns"; - -const useSideDrawerShowHiddenFieldsState = createPersistedState( - "__ROWY__SIDE_DRAWER_SHOW_HIDDEN_FIELDS" -); - -export interface IFormProps { - values: Values; -} - -export default function Form({ values }: IFormProps) { - const { userDoc, userClaims } = useAppContext(); - const { table, tableState, sideDrawerRef } = useProjectContext(); - - const userDocHiddenFields = - userDoc.state.doc?.tables?.[`${tableState!.config.id}`]?.hiddenFields ?? []; - - const [showHiddenFields, setShowHiddenFields] = - useSideDrawerShowHiddenFieldsState(false); - - const fields = showHiddenFields - ? _sortBy(Object.values(tableState!.columns), "index") - : _sortBy(Object.values(tableState!.columns), "index").filter( - (f) => !userDocHiddenFields.includes(f.key) - ); - - // Get initial values from fields config. This won’t be written to the db - // when the SideDrawer is opened. Only dirty fields will be written - const initialValues = fields.reduce( - (a, { key, type }) => { - const initialValue = getFieldProp("initialValue", type); - const nextValues = { ...a }; - if (key.indexOf('.') !== -1) { - _set(nextValues, key, initialValue); - } else { - nextValues[key] = initialValue; - } - return nextValues; - }, - {} - ); - const { ref: docRef, ...rowValues } = values; - const safeRowValues = sanitizeFirestoreRefs(rowValues); - const defaultValues = { ...initialValues, ...safeRowValues }; - - const methods = useForm({ mode: "onBlur", defaultValues }); - const { control, reset, formState, getValues } = methods; - const { dirtyFields } = formState; - - const column = sideDrawerRef?.current?.cell?.column; - useEffect(() => { - if (!column) return; - - const labelElem = document.getElementById( - `sidedrawer-label-${column}` - )?.parentElement; - const fieldElem = document.getElementById(`sidedrawer-field-${column}`); - - // Time out for double-clicking on cells, which can open the null editor - setTimeout(() => { - if (labelElem) labelElem.scrollIntoView({ behavior: "smooth" }); - if (fieldElem) fieldElem.focus({ preventScroll: true }); - }, 200); - }, [column]); - - return ( -
    - - - - - - {fields.map((field, i) => { - // Derivative/aggregate field support - let type = field.type; - if (field.config && field.config.renderFieldType) { - type = field.config.renderFieldType; - } - - const fieldComponent: IFieldConfig["SideDrawerField"] = getFieldProp( - "SideDrawerField", - type - ); - - // Should not reach this state - if (_isEmpty(fieldComponent)) { - // console.error('Could not find SideDrawerField component', field); - return null; - } - - // Disable field if locked, or if table is read-only - const disabled = - field.editable === false || - Boolean(table?.readOnly && !userClaims?.roles.includes("ADMIN")); - - return ( - - {createElement(fieldComponent, { - column: field, - control, - docRef, - disabled, - useFormMethods: methods, - })} - - ); - })} - - - - {userDocHiddenFields.length > 0 && ( - setShowHiddenFields(e.target.checked)} - /> - } - sx={{ - borderTop: 1, - borderColor: "divider", - pt: 3, - "& .MuiSwitch-root": { ml: -0.5 }, - }} - /> - )} - - - ); -} diff --git a/src/components/SideDrawer/Form/utils.ts b/src/components/SideDrawer/Form/utils.ts deleted file mode 100644 index c7ff6e37..00000000 --- a/src/components/SideDrawer/Form/utils.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Control } from "react-hook-form"; -import { makeStyles, createStyles } from "@mui/styles"; -import { FieldType } from "@src/constants/fields"; -import { colord } from "colord"; - -export interface IFieldProps { - control: Control; - name: string; - docRef: firebase.default.firestore.DocumentReference; - editable?: boolean; -} - -export type Values = Record; -export type Field = { - type?: FieldType; - name: string; - label?: string; - [key: string]: any; -}; -export type Fields = (Field | ((values: Values) => Field))[]; - -export const useFieldStyles = makeStyles((theme) => - createStyles({ - root: { - borderRadius: theme.shape.borderRadius, - padding: theme.spacing(0.5, 1.5), - - backgroundColor: theme.palette.action.input, - boxShadow: `0 0 0 1px ${ - theme.palette.mode === "dark" - ? colord(theme.palette.divider) - .alpha(colord(theme.palette.divider).alpha() / 2) - .toHslString() - : theme.palette.divider - } inset`, - - "&.Mui-disabled": { - backgroundColor: - theme.palette.mode === "dark" - ? "transparent" - : theme.palette.action.disabledBackground, - }, - - width: "100%", - minHeight: 32, - boxSizing: "border-box", - - display: "flex", - textAlign: "left", - alignItems: "center", - - ...theme.typography.body2, - color: theme.palette.text.primary, - }, - }) -); diff --git a/src/components/SideDrawer/index.tsx b/src/components/SideDrawer/index.tsx deleted file mode 100644 index bcaaae34..00000000 --- a/src/components/SideDrawer/index.tsx +++ /dev/null @@ -1,163 +0,0 @@ -import React, { useState, useEffect } from "react"; -import clsx from "clsx"; -import _isNil from "lodash/isNil"; -import _isEmpty from "lodash/isEmpty"; -import queryString from "query-string"; - -import { Drawer, Fab } from "@mui/material"; -import ChevronIcon from "@mui/icons-material/KeyboardArrowLeft"; -import ChevronUpIcon from "@mui/icons-material/KeyboardArrowUp"; -import ChevronDownIcon from "@mui/icons-material/KeyboardArrowDown"; - -import Form from "./Form"; -import ErrorBoundary from "@src/components/ErrorBoundary"; - -import { useStyles } from "./useStyles"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import useDoc from "@src/hooks/useDoc"; -import { analytics } from "@src/analytics"; - -export const DRAWER_WIDTH = 512; -export const DRAWER_COLLAPSED_WIDTH = 36; - -type SelectedCell = { row: number; column: string } | null; -export type SideDrawerRef = { - cell: SelectedCell; - setCell: React.Dispatch>; - open: boolean; - setOpen: React.Dispatch>; -}; - -export default function SideDrawer() { - const classes = useStyles(); - const { tableState, dataGridRef, sideDrawerRef } = useProjectContext(); - - const [cell, setCell] = useState(null); - const [open, setOpen] = useState(false); - if (sideDrawerRef) sideDrawerRef.current = { cell, setCell, open, setOpen }; - - const handleNavigate = (direction: "up" | "down") => () => { - if (!tableState?.rows) return; - let row = cell!.row; - if (direction === "up" && row > 0) row -= 1; - if (direction === "down" && row < tableState.rows.length - 1) row += 1; - setCell!((cell) => ({ column: cell!.column, row })); - const idx = tableState?.columns[cell!.column]?.index; - dataGridRef?.current?.selectCell({ rowIdx: row, idx }, false); - }; - - const [urlDocState, dispatchUrlDoc] = useDoc({}); - - useEffect(() => { - setOpen(false); - dispatchUrlDoc({ path: "", doc: null }); - }, [window.location.pathname]); - - useEffect(() => { - const rowRef = queryString.parse(window.location.search).rowRef as string; - if (rowRef) dispatchUrlDoc({ path: decodeURIComponent(rowRef) }); - }, []); - - const disabled = !open && (!cell || _isNil(cell.row)) && !urlDocState.doc; - useEffect(() => { - if (disabled && setOpen) setOpen(false); - }, [disabled]); - - useEffect(() => { - if (cell && tableState?.rows[cell.row]) { - if (urlDocState.doc) { - urlDocState.unsubscribe(); - dispatchUrlDoc({ path: "", doc: null }); - } - } - }, [cell]); - - return ( -
    - - -
    - {open && - (urlDocState.doc || cell) && - !_isEmpty(tableState?.columns) && ( -
    - )} -
    -
    - - {open && ( -
    - - - - - = tableState.rows.length - 1 - } - onClick={handleNavigate("down")} - > - - -
    - )} - -
    - { - if (setOpen) - setOpen((o) => { - analytics.logEvent( - o ? "side_drawer_close" : "side_drawer_open" - ); - return !o; - }); - }} - > - - -
    -
    -
    - ); -} diff --git a/src/components/SideDrawer/useStyles.ts b/src/components/SideDrawer/useStyles.ts deleted file mode 100644 index ff1eb50c..00000000 --- a/src/components/SideDrawer/useStyles.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { makeStyles, createStyles } from "@mui/styles"; -import { DRAWER_WIDTH, DRAWER_COLLAPSED_WIDTH } from "./index"; -import { APP_BAR_HEIGHT } from "@src/components/Navigation"; -import { TABLE_HEADER_HEIGHT } from "@src/components/TableHeader"; - -export const useStyles = makeStyles((theme) => - createStyles({ - open: {}, - disabled: { - "& $paper": { - transform: `translateX(calc(100% - env(safe-area-inset-right) - ${DRAWER_COLLAPSED_WIDTH}px))`, - }, - "& $fab": { - transform: "scale(0)", - }, - }, - - drawer: { - width: DRAWER_WIDTH, - flexShrink: 0, - whiteSpace: "nowrap", - }, - - paper: { - border: "none", - boxShadow: theme.shadows[4].replace(/, 0 (\d+px)/g, ", -$1 0"), - borderTopLeftRadius: `${(theme.shape.borderRadius as number) * 3}px`, - borderBottomLeftRadius: `${(theme.shape.borderRadius as number) * 3}px`, - - width: DRAWER_WIDTH, - maxWidth: `calc(100% - 28px - ${theme.spacing(1)})`, - overflowX: "visible", - overflowY: "visible", - - boxSizing: "content-box", - - top: APP_BAR_HEIGHT + TABLE_HEADER_HEIGHT, - height: `calc(100% - ${APP_BAR_HEIGHT + TABLE_HEADER_HEIGHT}px)`, - - transition: theme.transitions.create("transform", { - easing: theme.transitions.easing.easeInOut, - duration: theme.transitions.duration.standard, - }), - - zIndex: theme.zIndex.drawer - 1, - }, - paperClose: { - transform: `translateX(calc(100% - env(safe-area-inset-right) - ${DRAWER_COLLAPSED_WIDTH}px))`, - }, - - "@keyframes bumpPaper": { - "0%": { - transform: `translateX(calc(100% - env(safe-area-inset-right) - ${DRAWER_COLLAPSED_WIDTH}px))`, - }, - "50%": { - transform: `translateX(calc(100% - env(safe-area-inset-right) - ${DRAWER_COLLAPSED_WIDTH}px - ${theme.spacing( - 4 - )}))`, - }, - "100%": { - transform: `translateX(calc(100% - env(safe-area-inset-right) - ${DRAWER_COLLAPSED_WIDTH}px))`, - }, - }, - bumpPaper: { - animation: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut} $bumpPaper`, - }, - - fab: { - display: "flex", - transition: theme.transitions.create("transform", { - duration: theme.transitions.duration.short, - }), - - boxShadow: theme.shadows[4], - "&:active": { boxShadow: theme.shadows[4] }, - - "&.Mui-disabled": { boxShadow: theme.shadows[4] }, - - "& + &": { marginTop: theme.spacing(4) }, - }, - - navFabContainer: { - position: "absolute", - top: theme.spacing(6), - left: -32 / 2, - zIndex: theme.zIndex.drawer + 1, - }, - "@keyframes navFab": { - from: { - opacity: 0, - transform: "translateY(-48px)", - }, - to: { - opacity: 1, - transform: "translateY(0)", - }, - }, - navFab: { - animation: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut} both $navFab`, - }, - - drawerFabContainer: { - position: "absolute", - top: "50%", - transform: "translateY(-50%)", - left: theme.spacing(-3.5), - zIndex: theme.zIndex.drawer + 1, - }, - drawerFabIcon: { - // width: "2em", - // height: "2em", - "$open &": { transform: "rotate(180deg)" }, - }, - - drawerContents: { - padding: theme.spacing(5), - paddingRight: `max(env(safe-area-inset-right), ${theme.spacing(4)})`, - paddingBottom: `max(env(safe-area-inset-bottom), ${theme.spacing(5)})`, - overflowY: "auto", - }, - }) -); diff --git a/src/components/SnackbarProgress.tsx b/src/components/SnackbarProgress.tsx deleted file mode 100644 index 5ff8f64f..00000000 --- a/src/components/SnackbarProgress.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useState, Dispatch, SetStateAction, MutableRefObject } from "react"; - -import { Stack } from "@mui/material"; -import CircularProgressOptical from "@src/components/CircularProgressOptical"; - -export interface ISnackbarProgressRef { - setProgress: Dispatch>; - setTarget: Dispatch>; -} - -export interface ISnackbarProgressProps { - target?: number; - stateRef: MutableRefObject; -} - -export default function SnackbarProgress({ - target: targetProp = 100, - stateRef, -}: ISnackbarProgressProps) { - const [progress, setProgress] = useState(0); - const [target, setTarget] = useState(targetProp); - - stateRef.current = { setProgress, setTarget }; - - return ( - - - {progress}/{target} - - - - - ); -} diff --git a/src/components/Table/BulkActions/index.tsx b/src/components/Table/BulkActions/index.tsx deleted file mode 100644 index 4ad0859c..00000000 --- a/src/components/Table/BulkActions/index.tsx +++ /dev/null @@ -1,338 +0,0 @@ -import { useState } from "react"; -import _find from "lodash/find"; -import { useSnackbar } from "notistack"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { - alpha, - Grow, - Paper, - Grid, - Tooltip, - IconButton, - Typography, - TextField, - MenuItem, - Button, -} from "@mui/material"; -import InlineOpenInNewIcon from "@src/components/InlineOpenInNewIcon"; - -import CopyCellsIcon from "@src/assets/icons/CopyCells"; -import ClearSelectionIcon from "@mui/icons-material/IndeterminateCheckBox"; -import DeleteIcon from "@mui/icons-material/DeleteForever"; -import ArrowDropUpIcon from "@mui/icons-material/ArrowDropUp"; - -import { useConfirmation } from "@src/components/ConfirmationDialog/Context"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { formatPath, asyncForEach } from "@src/utils/fns"; -// import routes from "@src/constants/routes"; -import { runRoutes } from "@src/constants/runRoutes"; -// import { config } from "process"; -import { WIKI_LINKS } from "@src/constants/externalLinks"; - -const useStyles = makeStyles((theme) => - createStyles({ - root: { - position: "fixed", - bottom: theme.spacing(2), - left: "50%", - transform: "translateX(-50%)", - }, - - paper: { - height: 64, - borderRadius: 32, - padding: theme.spacing(0, 1), - [theme.breakpoints.up("lg")]: { paddingRight: theme.spacing(2) }, - - zIndex: theme.zIndex.modal, - - backgroundColor: theme.palette.background.default, - - width: 470, - maxWidth: "100vw", - overflowX: "auto", - }, - - grid: { - height: "100%", - marginTop: 0, - marginBottom: 0, - }, - spacer: { width: theme.spacing(2) }, - - selectedContainer: { - flexBasis: 206, - flexShrink: 0, - }, - selected: { - color: theme.palette.text.disabled, - fontFeatureSettings: '"tnum"', - userSelect: "none", - - display: "inline-block", - marginRight: theme.spacing(1), - minWidth: 150, - }, - - dropdown: { - minWidth: 120, - margin: 0, - }, - inputBaseRoot: { - borderRadius: theme.shape.borderRadius, - backgroundColor: - theme.palette.mode === "dark" - ? alpha(theme.palette.text.primary, 0.06) - : undefined, - }, - dropdownLabel: { - left: theme.spacing(1.5), - - ...theme.typography.body1, - }, - dropdownLabelFocused: { - "$dropdownLabel&": { color: theme.palette.text.primary }, - }, - select: { - // paddingTop: "6px !important", - // paddingBottom: "7px !important", - }, - dropdownMenu: { - // marginTop: theme.spacing(-3) - }, - }) -); - -export default function BulkActions({ selectedRows, columns, clearSelection }) { - const classes = useStyles(); - const [, setLoading] = useState(); - const { - tableActions, - addRow, - tableState, - deleteRow, - rowyRun, - compatibleRowyRunVersion, - } = useProjectContext(); - - const { requestConfirmation } = useConfirmation(); - const { enqueueSnackbar } = useSnackbar(); - - const actionColumns: { name: string; key: string; config: any }[] = columns - .filter((column) => column.type === "ACTION") - .map((column) => ({ - name: column.name, - key: column.key, - config: column.config, - })); - - const handleDuplicate = () => { - asyncForEach(selectedRows, async (row) => { - const clonedRow = { ...row }; - // remove metadata - delete clonedRow.ref; - delete clonedRow.rowHeight; - Object.keys(clonedRow).forEach((key) => { - if (clonedRow[key] === undefined) delete clonedRow[key]; - }); - await addRow!(clonedRow, undefined, { type: "smaller" }); - //sleep 1 sec - await new Promise((resolve) => setTimeout(resolve, 1000)); - }); - clearSelection(); - }; - const handleDelete = () => { - deleteRow!(selectedRows.map((row) => row.ref)); - clearSelection(); - }; - - const handleActionScript = async (actionColumn, actionType) => { - const requiredVersion = "1.2.0"; - if (!compatibleRowyRunVersion!({ minVersion: requiredVersion })) { - enqueueSnackbar( - `Upgrade your Rowy run to ${requiredVersion} or above, to run bulk actions`, - { - variant: "warning", - action: ( - - ), - } - ); - return; - } - const refs = selectedRows.map((row) => { - const { ref } = row; - return { - path: ref.path, - id: ref.id, - tablePath: window.location.pathname, - }; - }); - const data = { - refs, - column: actionColumn, - action: actionType, - schemaDocPath: formatPath(tableState?.config.id ?? ""), - actionParams: {}, - }; - setLoading(true); - const result = await rowyRun!({ - route: runRoutes.actionScript, - body: data, - }); - Array.isArray(result) - ? result.map((res) => - enqueueSnackbar(res.message, { - variant: res.success ? "success" : "error", - }) - ) - : enqueueSnackbar(result.message, { - variant: result.success ? "success" : "error", - }); - setLoading(false); - clearSelection(); - }; - const executeAction = async (key: string, actionType: string) => { - const actionColumn = _find(actionColumns, { key }); - if (!actionColumn) return; - if (actionColumn.config.isActionScript) { - handleActionScript(actionColumn, actionType); - } else { - enqueueSnackbar("Callable actions not implemented yet", { - variant: "warning", - }); - } - }; - - const numSelected = selectedRows.length; - - return ( -
    - 0}> - - - - - - - - - - - {numSelected} row{numSelected !== 1 && "s"} selected - - - - - - - {/* - {`${actionColumns.length} action${ - actionColumns.length !== 1 ? "s" : "" - }`} - */} - executeAction(event.target.value, "run")} - margin="dense" - InputProps={{ - disableUnderline: true, - classes: { root: classes.inputBaseRoot }, - }} - InputLabelProps={{ - classes: { - root: classes.dropdownLabel, - focused: classes.dropdownLabelFocused, - }, - }} - SelectProps={{ - classes: { select: classes.select }, - displayEmpty: true, - MenuProps: { - anchorOrigin: { vertical: "top", horizontal: "left" }, - transformOrigin: { vertical: "bottom", horizontal: "left" }, - classes: { paper: classes.dropdownMenu }, - }, - IconComponent: ArrowDropUpIcon, - }} - label={`${actionColumns.length} action${ - actionColumns.length !== 1 ? "s" : "" - }`} - > - {actionColumns.map((action) => ( - - {action.name} - - ))} - - - - - - - - { - requestConfirmation({ - title: "Duplicate rows?", - body: `Are you sure you want to duplicate the ${numSelected} selected row${ - numSelected !== 1 ? "s" : "" - }?`, - confirm: "Duplicate rows", - handleConfirm: handleDuplicate, - }); - }} - aria-label="Duplicate selected rows" - > - - - - - - - - { - requestConfirmation({ - title: "Delete rows?", - body: `Are you sure you want to delete the ${numSelected} select row${ - numSelected !== 1 ? "s" : "" - }?`, - confirm: "Delete rows", - handleConfirm: handleDelete, - }); - }} - aria-label="Delete selected rows" - > - - - - - - - -
    - ); -} diff --git a/src/components/Table/CellValidation.tsx b/src/components/Table/CellValidation.tsx deleted file mode 100644 index ac6a9764..00000000 --- a/src/components/Table/CellValidation.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { styled } from "@mui/material/styles"; -import ErrorIcon from "@mui/icons-material/ErrorOutline"; -import WarningIcon from "@mui/icons-material/WarningAmber"; - -import RichTooltip from "@src/components/RichTooltip"; - -const Root = styled("div", { shouldForwardProp: (prop) => prop !== "error" })( - ({ theme, ...props }) => ({ - width: "100%", - height: "100%", - padding: "var(--cell-padding)", - position: "relative", - - overflow: "hidden", - contain: "strict", - display: "flex", - alignItems: "center", - - ...((props as any).error - ? { - ".rdg-cell:not([aria-selected=true]) &": { - boxShadow: `inset 0 0 0 2px ${theme.palette.error.main}`, - }, - } - : {}), - }) -); - -const Dot = styled("div")(({ theme }) => ({ - position: "absolute", - right: -5, - top: "50%", - transform: "translateY(-50%)", - zIndex: 1, - - width: 12, - height: 12, - - borderRadius: "50%", - backgroundColor: theme.palette.error.main, - - boxShadow: `0 0 0 4px var(--background-color)`, - ".rdg-row:hover &": { - boxShadow: `0 0 0 4px var(--row-hover-background-color)`, - }, -})); - -export interface ICellValidationProps - extends React.DetailedHTMLProps< - React.HTMLAttributes, - HTMLDivElement - > { - value: any; - required?: boolean; - validationRegex?: string; -} - -export default function CellValidation({ - value, - required, - validationRegex, - children, -}: ICellValidationProps) { - const isInvalid = validationRegex && !new RegExp(validationRegex).test(value); - const isMissing = required && value === undefined; - - if (isInvalid) - return ( - <> - } - title="Invalid data" - message="This row will not be saved until all the required fields contain valid data" - placement="right" - render={({ openTooltip }) => } - /> - - {children} - - ); - - if (isMissing) - return ( - <> - } - title="Required field" - message="This row will not be saved until all the required fields contain valid data" - placement="right" - render={({ openTooltip }) => } - /> - - {children} - - ); - - return {children}; -} diff --git a/src/components/Table/ColumnHeader.tsx b/src/components/Table/ColumnHeader.tsx deleted file mode 100644 index 97d2b0da..00000000 --- a/src/components/Table/ColumnHeader.tsx +++ /dev/null @@ -1,322 +0,0 @@ -import { useRef } from "react"; -import clsx from "clsx"; -import { HeaderRendererProps } from "react-data-grid"; -import { useDrag, useDrop, DragObjectWithType } from "react-dnd"; -import useCombinedRefs from "@src/hooks/useCombinedRefs"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { - alpha, - Tooltip, - Fade, - Grid, - IconButton, - Typography, -} from "@mui/material"; -import SortDescIcon from "@mui/icons-material/ArrowDownward"; -import DropdownIcon from "@mui/icons-material/MoreHoriz"; -import LockIcon from "@mui/icons-material/LockOutlined"; - -import { FieldType } from "@src/constants/fields"; -import { getFieldProp } from "@src/components/fields"; -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { TableOrder } from "@src/hooks/useTable"; - -const useStyles = makeStyles((theme) => - createStyles({ - root: { - height: "100%", - "& svg, & button": { display: "block" }, - - color: theme.palette.text.secondary, - transition: theme.transitions.create("color", { - duration: theme.transitions.duration.short, - }), - "&:hover": { color: theme.palette.text.primary }, - - cursor: "move", - - padding: theme.spacing(0, 0.5, 0, 1), - width: "100%", - }, - isDragging: { opacity: 0.5 }, - isOver: { - backgroundColor: alpha( - theme.palette.primary.main, - theme.palette.action.focusOpacity - ), - color: theme.palette.primary.main, - }, - - columnNameContainer: { - flexShrink: 1, - overflow: "hidden", - margin: theme.spacing(0, 0.5), - marginRight: -30, - }, - columnName: { - ...theme.typography.caption, - fontWeight: theme.typography.fontWeightMedium, - lineHeight: "42px", - textOverflow: "clip", - }, - - columnNameTooltip: { - background: theme.palette.background.default, - color: theme.palette.text.primary, - - margin: "-41px 0 0 !important", - padding: theme.spacing(0, 1.5, 0, 0), - - "& *": { lineHeight: "40px" }, - }, - - sortIconContainer: { - backgroundColor: theme.palette.background.default, - opacity: 0, - transition: theme.transitions.create("opacity", { - duration: theme.transitions.duration.shortest, - }), - "$root:hover &": { opacity: 1 }, - }, - sortIconContainerSorted: { opacity: 1 }, - - sortIcon: { - transition: theme.transitions.create(["background-color", "transform"], { - duration: theme.transitions.duration.short, - }), - }, - sortIconAsc: { - transform: "rotate(180deg)", - }, - - dropdownButton: { - transition: theme.transitions.create("color", { - duration: theme.transitions.duration.short, - }), - - color: theme.palette.text.disabled, - "$root:hover &": { color: theme.palette.text.primary }, - }, - }) -); - -interface ColumnDragObject extends DragObjectWithType { - key: string; -} - -export default function DraggableHeaderRenderer({ - column, -}: HeaderRendererProps & { - onColumnsReorder: (sourceKey: string, targetKey: string) => void; -}) { - const classes = useStyles(); - const { userClaims } = useAppContext(); - const { tableState, tableActions, columnMenuRef } = useProjectContext(); - const [{ isDragging }, drag] = useDrag({ - item: { key: column.key, type: "COLUMN_DRAG" }, - collect: (monitor) => ({ - isDragging: !!monitor.isDragging(), - }), - }); - - const [{ isOver }, drop] = useDrop({ - accept: "COLUMN_DRAG", - drop({ key, type }: ColumnDragObject) { - if (type === "COLUMN_DRAG") { - // onColumnsReorder(key, props.column.key); - tableActions?.column.reorder(key, column.key); - } - }, - collect: (monitor) => ({ - isOver: !!monitor.isOver(), - canDrop: !!monitor.canDrop(), - }), - }); - - const headerRef = useCombinedRefs(drag, drop); - const buttonRef = useRef(null); - - if (!columnMenuRef || !tableState || !tableActions) return null; - const { orderBy } = tableState; - - const handleOpenMenu = (e: React.MouseEvent) => { - e.preventDefault(); - columnMenuRef?.current?.setSelectedColumnHeader({ - column, - anchorEl: buttonRef.current, - }); - }; - const _sortKey = getFieldProp("sortKey", (column as any).type); - const sortKey = _sortKey ? `${column.key}.${_sortKey}` : column.key; - - const isSorted = orderBy?.[0]?.key === sortKey; - const isAsc = isSorted && orderBy?.[0]?.direction === "asc"; - const isDesc = isSorted && orderBy?.[0]?.direction === "desc"; - - const handleSortClick = () => { - let ordering: TableOrder = []; - - if (!isSorted) ordering = [{ key: sortKey, direction: "desc" }]; - else if (isDesc) ordering = [{ key: sortKey, direction: "asc" }]; - else ordering = []; - - tableActions.table.orderBy(ordering); - }; - - return ( - - {(column.width as number) > 140 && ( - - Click to copy field key: -
    - {column.key} - - } - enterDelay={1000} - placement="bottom-start" - > - { - navigator.clipboard.writeText(column.key); - }} - > - {column.editable === false ? ( - - ) : ( - getFieldProp("icon", (column as any).type) - )} - -
    - )} - - - - {column.name as string} - - } - enterDelay={1000} - placement="bottom-start" - disableInteractive - // PopperProps={{ - // modifiers: [ - // { - // name: "flip", - // options: { - // enabled: false, - // }, - // }, - // { - // name: "preventOverflow", - // options: { - // enabled: false, - // boundariesElement: "scrollParent", - // }, - // }, - // { - // name: "hide", - // options: { - // enabled: false, - // }, - // }, - // ], - // }} - TransitionComponent={Fade} - classes={{ tooltip: classes.columnNameTooltip }} - > - - {column.name as string} - - - - - {(column as any).type !== FieldType.id && ( - - - - - - - - )} - - {(userClaims?.roles?.includes("ADMIN") || - (userClaims?.roles?.includes("OPS") && - [FieldType.multiSelect, FieldType.singleSelect].includes( - (column as any).type - ))) && ( - - - - - - - - )} -
    - ); - // return ( - //
    - // {props.column.name as string} - //
    - // ); -} diff --git a/src/components/Table/ColumnMenu/FieldSettings/DefaultValueInput.tsx b/src/components/Table/ColumnMenu/FieldSettings/DefaultValueInput.tsx deleted file mode 100644 index 7dc23539..00000000 --- a/src/components/Table/ColumnMenu/FieldSettings/DefaultValueInput.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import { lazy, Suspense, createElement } from "react"; -import { useForm } from "react-hook-form"; -import { IMenuModalProps } from ".."; - -import Checkbox from "@mui/material/Checkbox"; -import FormControlLabel from "@mui/material/FormControlLabel"; -import { Typography, TextField, MenuItem, ListItemText } from "@mui/material"; - -import { getFieldProp } from "@src/components/fields"; -import FieldSkeleton from "@src/components/SideDrawer/Form/FieldSkeleton"; -import CodeEditorHelper from "@src/components/CodeEditor/CodeEditorHelper"; -import FormAutosave from "./FormAutosave"; -import { FieldType } from "@src/constants/fields"; -import { WIKI_LINKS } from "@src/constants/externalLinks"; -import { name } from "@root/package.json"; -/* eslint-disable import/no-webpack-loader-syntax */ -import defaultValueDefs from "!!raw-loader!./defaultValue.d.ts"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -const _CodeEditor = lazy( - () => - import("@src/components/CodeEditor" /* webpackChunkName: "CodeEditor" */) -); - -const diagnosticsOptions = { - noSemanticValidation: false, - noSyntaxValidation: false, - noSuggestionDiagnostics: true, -}; - -export interface IDefaultValueInputProps extends IMenuModalProps { - handleChange: (key: any) => (update: any) => void; -} - -const CodeEditor = ({ type, config, handleChange }) => { - const { compatibleRowyRunVersion } = useProjectContext(); - const functionBodyOnly = compatibleRowyRunVersion!({ maxVersion: "1.3.10" }); - const returnType = getFieldProp("dataType", type) ?? "any"; - - const dynamicValueFn = functionBodyOnly - ? config.defaultValue?.script - : config.defaultValue?.dynamicValueFn - ? config.defaultValue?.dynamicValueFn - : config.defaultValue?.script - ? `const dynamicValueFn : DefaultValue = async ({row,ref,db,storage,auth})=>{ - ${config.defaultValue.script} - }` - : `const dynamicValueFn : DefaultValue = async ({row,ref,db,storage,auth})=>{ - // Write your default value code here - // for example: - // generate random hex color - // const color = "#" + Math.floor(Math.random() * 16777215).toString(16); - // return color; - // checkout the documentation for more info: https://docs.rowy.io/how-to/default-values#dynamic - }`; - return ( - <_CodeEditor - value={dynamicValueFn} - diagnosticsOptions={functionBodyOnly ? undefined : diagnosticsOptions} - extraLibs={[ - defaultValueDefs.replace( - `"PLACEHOLDER_OUTPUT_TYPE"`, - `${returnType} | Promise<${returnType}>` - ), - ]} - onChange={handleChange( - functionBodyOnly ? "defaultValue.script" : "defaultValue.dynamicValueFn" - )} - /> - ); -}; - -export default function DefaultValueInput({ - config, - handleChange, - type, - fieldName, - ...props -}: IDefaultValueInputProps) { - const { settings } = useProjectContext(); - - const _type = - type !== FieldType.derivative - ? type - : config.renderFieldType ?? FieldType.shortText; - const customFieldInput = getFieldProp("SideDrawerField", _type); - const { control } = useForm({ - mode: "onBlur", - defaultValues: { - [fieldName]: - config.defaultValue?.value ?? getFieldProp("initialValue", _type), - }, - }); - - return ( - <> - handleChange("defaultValue.type")(e.target.value)} - fullWidth - sx={{ mb: 1 }} - > - - - - - - Initialise as null. - - } - /> - - - - - - - Dynamic —{" "} - - Requires Rowy Run setup - - - ) - } - secondary="Write code to set the default value using Rowy Run" - /> - - - {(!config.defaultValue || config.defaultValue.type === "undefined") && ( - <> - - Make this column required - - The row will not be created or updated unless all required - values are set. - - - } - control={ - handleChange("required")(e.target.checked)} - name="required" - /> - } - /> - - )} - {config.defaultValue?.type === "static" && customFieldInput && ( - - - handleChange("defaultValue.value")(values[fieldName]) - } - /> - - {createElement(customFieldInput, { - column: { type, key: fieldName, config, ...props, ...config }, - control, - docRef: {}, - disabled: false, - })} - - )} - - {config.defaultValue?.type === "dynamic" && ( - <> - - }> - - - - )} - - ); -} diff --git a/src/components/Table/ColumnMenu/FieldSettings/FormAutosave.tsx b/src/components/Table/ColumnMenu/FieldSettings/FormAutosave.tsx deleted file mode 100644 index 52fda33d..00000000 --- a/src/components/Table/ColumnMenu/FieldSettings/FormAutosave.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useEffect } from "react"; -import { useDebounce } from "use-debounce"; -import _isEqual from "lodash/isEqual"; - -import { Control, useWatch } from "react-hook-form"; - -export interface IAutosaveProps { - control: Control; - handleSave: (values: any) => void; - debounce?: number; -} - -export default function FormAutosave({ - control, - handleSave, - debounce = 1000, -}: IAutosaveProps) { - const values = useWatch({ control }); - - const [debouncedValue] = useDebounce(values, debounce, { - equalityFn: _isEqual, - }); - - useEffect(() => { - handleSave(debouncedValue); - }, [debouncedValue]); - - return null; -} diff --git a/src/components/Table/ColumnMenu/FieldSettings/defaultValue.d.ts b/src/components/Table/ColumnMenu/FieldSettings/defaultValue.d.ts deleted file mode 100644 index 0e50bb2d..00000000 --- a/src/components/Table/ColumnMenu/FieldSettings/defaultValue.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -type DefaultValueContext = { - row: Row; - ref: FirebaseFirestore.DocumentReference; - storage: firebasestorage.Storage; - db: FirebaseFirestore.Firestore; - auth: firebaseauth.BaseAuth; -}; -type DefaultValue = (context: DefaultValueContext) => "PLACEHOLDER_OUTPUT_TYPE"; diff --git a/src/components/Table/ColumnMenu/FieldSettings/index.tsx b/src/components/Table/ColumnMenu/FieldSettings/index.tsx deleted file mode 100644 index 989be3f1..00000000 --- a/src/components/Table/ColumnMenu/FieldSettings/index.tsx +++ /dev/null @@ -1,202 +0,0 @@ -import { useState, Suspense, useMemo, createElement } from "react"; -import _set from "lodash/set"; -import { IMenuModalProps } from ".."; - -import { Typography, Stack } from "@mui/material"; - -import Modal from "@src/components/Modal"; -import { getFieldProp } from "@src/components/fields"; -import DefaultValueInput from "./DefaultValueInput"; -import ErrorBoundary from "@src/components/ErrorBoundary"; -import Loading from "@src/components/Loading"; - -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { useConfirmation } from "@src/components/ConfirmationDialog"; -import { useSnackLogContext } from "@src/contexts/SnackLogContext"; -import { FieldType } from "@src/constants/fields"; -import { runRoutes } from "@src/constants/runRoutes"; -import { useSnackbar } from "notistack"; - -export default function FieldSettings(props: IMenuModalProps) { - const { name, fieldName, type, open, config, handleClose, handleSave } = - props; - - const [showRebuildPrompt, setShowRebuildPrompt] = useState(false); - const [newConfig, setNewConfig] = useState(config ?? {}); - const customFieldSettings = getFieldProp("settings", type); - const settingsValidator = getFieldProp("settingsValidator", type); - const initializable = getFieldProp("initializable", type); - - const { requestConfirmation } = useConfirmation(); - const { enqueueSnackbar } = useSnackbar(); - const { tableState, rowyRun } = useProjectContext(); - const snackLogContext = useSnackLogContext(); - - const rendedFieldSettings = useMemo( - () => - [FieldType.derivative, FieldType.aggregate].includes(type) && - newConfig.renderFieldType - ? getFieldProp("settings", newConfig.renderFieldType) - : null, - [newConfig.renderFieldType, type] - ); - - const [errors, setErrors] = useState({}); - - if (!open) return null; - - const validateSettings = () => { - if (settingsValidator) { - const errors = settingsValidator(newConfig); - setErrors(errors); - return errors; - } - setErrors({}); - return {}; - }; - - const handleChange = (key: string) => (update: any) => { - if ( - showRebuildPrompt === false && - (key.includes("defaultValue") || type === FieldType.derivative) && - config[key] !== update - ) { - setShowRebuildPrompt(true); - } - const updatedConfig = _set({ ...newConfig }, key, update); - setNewConfig(updatedConfig); - validateSettings(); - }; - - return ( - }> - <> - {initializable && ( - <> -
    - {/* top margin fixes visual bug */} - - - -
    - - )} - - {customFieldSettings && ( - - {createElement(customFieldSettings, { - config: newConfig, - onChange: handleChange, - fieldName, - onBlur: validateSettings, - errors, - })} - - )} - - {rendedFieldSettings && ( - - - Rendered field config - - {createElement(rendedFieldSettings, { - config: newConfig, - onChange: handleChange, - onBlur: validateSettings, - errors, - })} - - )} - {/* { - - } */} - -
    - } - actions={{ - primary: { - onClick: () => { - const errors = validateSettings(); - if (Object.keys(errors).length > 0) { - requestConfirmation({ - title: "Invalid settings", - customBody: ( - <> - Please fix the following settings: -
      - {Object.entries(errors).map(([key, message]) => ( -
    • - {key}: {message} -
    • - ))} -
    - - ), - confirm: "Fix", - hideCancel: true, - handleConfirm: () => {}, - }); - return; - } - if (showRebuildPrompt) { - enqueueSnackbar("Saving changes...", { - autoHideDuration: 1500, - }); - handleSave(fieldName, { config: newConfig }, () => { - requestConfirmation({ - title: "Deploy changes", - body: "You have made changes that affect the behavior of the cloud function of this table, Would you like to redeploy it now?", - confirm: "Deploy", - cancel: "Later", - handleConfirm: async () => { - if (!rowyRun) return; - snackLogContext.requestSnackLog(); - rowyRun({ - route: runRoutes.buildFunction, - body: { - tablePath: tableState?.tablePath, - pathname: window.location.pathname, - tableConfigPath: tableState?.config.tableConfig.path, - }, - }); - }, - }); - }); - } else { - handleSave(fieldName, { config: newConfig }); - } - - handleClose(); - setShowRebuildPrompt(false); - }, - children: "Update", - }, - secondary: { - onClick: handleClose, - children: "Cancel", - }, - }} - /> - ); -} diff --git a/src/components/Table/ColumnMenu/FieldsDropdown.tsx b/src/components/Table/ColumnMenu/FieldsDropdown.tsx deleted file mode 100644 index a25020ff..00000000 --- a/src/components/Table/ColumnMenu/FieldsDropdown.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import MultiSelect from "@rowy/multiselect"; -import { ListItemIcon } from "@mui/material"; - -import { FIELDS } from "@src/components/fields"; -import { FieldType } from "@src/constants/fields"; -import { getFieldProp } from "@src/components/fields"; - -export interface IFieldsDropdownProps { - value: FieldType; - onChange: (value: FieldType) => void; - hideLabel?: boolean; - label?: string; - options?: FieldType[]; - [key: string]: any; -} - -/** - * Returns dropdown component of all available types - */ -export default function FieldsDropdown({ - value, - onChange, - hideLabel = false, - label, - options: optionsProp, - ...props -}: IFieldsDropdownProps) { - const options = optionsProp - ? FIELDS.filter((fieldConfig) => optionsProp.indexOf(fieldConfig.type) > -1) - : FIELDS; - - return ( - ({ - label: fieldConfig.name, - value: fieldConfig.type, - }))} - {...({ - AutocompleteProps: { - groupBy: (option) => getFieldProp("group", option.value), - }, - } as any)} - itemRenderer={(option) => ( - <> - - {getFieldProp("icon", option.value as FieldType)} - - {option.label} - - )} - label={label || "Field type"} - labelPlural="field types" - TextFieldProps={{ - hiddenLabel: hideLabel, - helperText: value && getFieldProp("description", value), - ...props.TextFieldProps, - SelectProps: { - displayEmpty: true, - renderValue: () => ( - <> - - {getFieldProp("icon", value as FieldType)} - - {getFieldProp("name", value as FieldType)} - - ), - ...props.TextFieldProps?.SelectProps, - }, - }} - /> - ); -} diff --git a/src/components/Table/ColumnMenu/MenuContents.tsx b/src/components/Table/ColumnMenu/MenuContents.tsx deleted file mode 100644 index d442b77d..00000000 --- a/src/components/Table/ColumnMenu/MenuContents.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Fragment } from "react"; - -import { MenuItem, ListItemIcon, ListSubheader, Divider } from "@mui/material"; - -export interface IMenuContentsProps { - menuItems: { - type?: string; - label?: string; - activeLabel?: string; - icon?: JSX.Element; - activeIcon?: JSX.Element; - onClick?: () => void; - active?: boolean; - color?: "error"; - disabled?: boolean; - }[]; -} - -export default function MenuContents({ menuItems }: IMenuContentsProps) { - return ( - <> - {menuItems.map((item, index) => { - if (item.type === "subheader") - return ( - - - {item.label && ( - {item.label} - )} - - ); - - let icon: JSX.Element = item.icon ?? <>; - if (item.active && !!item.activeIcon) icon = item.activeIcon; - - return ( - - {icon} - {item.active ? item.activeLabel : item.label} - - ); - })} - - ); -} diff --git a/src/components/Table/ColumnMenu/NameChange.tsx b/src/components/Table/ColumnMenu/NameChange.tsx deleted file mode 100644 index 28d20af1..00000000 --- a/src/components/Table/ColumnMenu/NameChange.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useState } from "react"; -import { IMenuModalProps } from "."; - -import { TextField } from "@mui/material"; - -import Modal from "@src/components/Modal"; - -export default function NameChange({ - name, - fieldName, - open, - handleClose, - handleSave, -}: IMenuModalProps) { - const [newName, setName] = useState(name); - - if (!open) return null; - - return ( - { - setName(e.target.value); - }} - /> - } - actions={{ - primary: { - onClick: () => { - handleSave(fieldName, { name: newName }); - handleClose(); - }, - children: "Update", - }, - secondary: { - onClick: handleClose, - children: "Cancel", - }, - }} - /> - ); -} diff --git a/src/components/Table/ColumnMenu/NewColumn.tsx b/src/components/Table/ColumnMenu/NewColumn.tsx deleted file mode 100644 index e23ec00e..00000000 --- a/src/components/Table/ColumnMenu/NewColumn.tsx +++ /dev/null @@ -1,176 +0,0 @@ -import { useState, useEffect } from "react"; -import _camel from "lodash/camelCase"; -import { IMenuModalProps } from "."; - -import { TextField, Typography, Button } from "@mui/material"; - -import Modal from "@src/components/Modal"; -import FieldsDropdown from "./FieldsDropdown"; - -import { FieldType } from "@src/constants/fields"; -import { getFieldProp } from "@src/components/fields"; -import { analytics } from "analytics"; -import { useProjectContext } from "@src/contexts/ProjectContext"; - -const AUDIT_FIELD_TYPES = [ - FieldType.createdBy, - FieldType.createdAt, - FieldType.updatedBy, - FieldType.updatedAt, -]; -export interface INewColumnProps extends IMenuModalProps { - data: Record; - openSettings: (column: any) => void; -} -export default function NewColumn({ - open, - data, - openSettings, - handleClose, -}: INewColumnProps) { - const { settingsActions, table, tableActions } = useProjectContext(); - const [columnLabel, setColumnLabel] = useState(""); - const [fieldKey, setFieldKey] = useState(""); - const [type, setType] = useState(FieldType.shortText); - const requireConfiguration = getFieldProp("requireConfiguration", type); - - const isAuditField = AUDIT_FIELD_TYPES.includes(type); - - useEffect(() => { - switch (type) { - case FieldType.id: - setColumnLabel("ID"); - setFieldKey("id"); - break; - case FieldType.createdBy: - setColumnLabel("Created By"); - setFieldKey(table?.auditFieldCreatedBy || "_createdBy"); - break; - case FieldType.updatedBy: - setColumnLabel("Updated By"); - setFieldKey(table?.auditFieldUpdatedBy || "_updatedBy"); - break; - case FieldType.createdAt: - setColumnLabel("Created At"); - setFieldKey( - (table?.auditFieldCreatedBy || "_createdBy") + ".timestamp" - ); - break; - case FieldType.updatedAt: - setColumnLabel("Updated At"); - setFieldKey( - (table?.auditFieldUpdatedBy || "_updatedBy") + ".timestamp" - ); - break; - } - }, [type, table?.auditFieldCreatedBy, table?.auditFieldUpdatedBy]); - - if (!open) return null; - - return ( - -
    - { - setColumnLabel(e.target.value); - if (type !== FieldType.id && !isAuditField) { - setFieldKey(_camel(e.target.value)); - } - }} - helperText="Set the user-facing name for this column." - /> -
    - -
    - setFieldKey(e.target.value)} - disabled={ - (type === FieldType.id && fieldKey === "id") || isAuditField - } - helperText="Set the Firestore field key to link to this column. It will display any existing data for this field key." - sx={{ "& .MuiInputBase-input": { fontFamily: "mono" } }} - /> -
    - -
    - -
    - - {isAuditField && table?.audit === false && ( -
    - - This field requires auditing to be enabled on this table. - - - -
    - )} - - } - actions={{ - primary: { - onClick: () => { - tableActions?.column.insert( - { - type, - name: columnLabel, - fieldName: fieldKey, - key: fieldKey, - config: {}, - }, - { - insert: data.insert, - index: data.sourceIndex, - } - ); - if (requireConfiguration) { - openSettings({ - type, - name: columnLabel, - fieldName: fieldKey, - key: fieldKey, - config: {}, - }); - } else handleClose(); - analytics.logEvent("create_column", { - type, - }); - }, - disabled: !columnLabel || !fieldKey || !type, - children: requireConfiguration ? "Next" : "Add", - }, - secondary: { - onClick: handleClose, - children: "Cancel", - }, - }} - /> - ); -} diff --git a/src/components/Table/ColumnMenu/Subheading.tsx b/src/components/Table/ColumnMenu/Subheading.tsx deleted file mode 100644 index acf23d6d..00000000 --- a/src/components/Table/ColumnMenu/Subheading.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useTheme, Typography, TypographyProps } from "@mui/material"; - -export default function Subheading(props: TypographyProps<"h2">) { - const theme = useTheme(); - - return ( - - ); -} diff --git a/src/components/Table/ColumnMenu/TypeChange.tsx b/src/components/Table/ColumnMenu/TypeChange.tsx deleted file mode 100644 index 9d1e9b1a..00000000 --- a/src/components/Table/ColumnMenu/TypeChange.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { useState } from "react"; - -import { IMenuModalProps } from "."; -import Modal from "@src/components/Modal"; -import FieldsDropdown from "./FieldsDropdown"; -import { analytics } from "analytics"; -export default function FormDialog({ - fieldName, - type, - open, - handleClose, - handleSave, -}: IMenuModalProps) { - const [newType, setType] = useState(type); - - if (!open) return null; - - return ( - } - actions={{ - primary: { - onClick: () => { - handleSave(fieldName, { type: newType }); - handleClose(); - analytics.logEvent("change_column_type", { - newType, - prevType: type, - }); - }, - children: "Update", - }, - }} - maxWidth="xs" - /> - ); -} diff --git a/src/components/Table/ColumnMenu/index.tsx b/src/components/Table/ColumnMenu/index.tsx deleted file mode 100644 index 3b5e98d2..00000000 --- a/src/components/Table/ColumnMenu/index.tsx +++ /dev/null @@ -1,371 +0,0 @@ -import React, { useState, useEffect } from "react"; - -import { - Menu, - ListItem, - ListItemIcon, - ListItemText, - Typography, -} from "@mui/material"; -import LockOpenIcon from "@mui/icons-material/LockOpen"; -import LockIcon from "@mui/icons-material/LockOutlined"; -// import VisibilityOffIcon from "@mui/icons-material/VisibilityOffOutlined"; -// import VisibilityIcon from "@mui/icons-material/VisibilityOutlined"; -import FreezeIcon from "@src/assets/icons/Freeze"; -import UnfreezeIcon from "@src/assets/icons/Unfreeze"; -import CellResizeIcon from "@src/assets/icons/CellResize"; -import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward"; -import ArrowUpwardIcon from "@mui/icons-material/ArrowUpward"; -import EditIcon from "@mui/icons-material/EditOutlined"; -// import ReorderIcon from "@mui/icons-material/Reorder"; -import SettingsIcon from "@mui/icons-material/SettingsOutlined"; -import ColumnPlusBeforeIcon from "@src/assets/icons/ColumnPlusBefore"; -import ColumnPlusAfterIcon from "@src/assets/icons/ColumnPlusAfter"; -import ColumnRemoveIcon from "@src/assets/icons/ColumnRemove"; - -import MenuContents from "./MenuContents"; -import NameChange from "./NameChange"; -import NewColumn from "./NewColumn"; -import TypeChange from "./TypeChange"; -import FieldSettings from "./FieldSettings"; -import ColumnHeader from "@src/components/Wizards/Column"; - -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { FieldType } from "@src/constants/fields"; -import { getFieldProp } from "@src/components/fields"; - -import { Column } from "react-data-grid"; -import { PopoverProps } from "@mui/material"; -import { useConfirmation } from "@src/components/ConfirmationDialog"; -import { analytics } from "@src/analytics"; - -const INITIAL_MODAL = { type: "", data: {} }; - -enum ModalStates { - nameChange = "NAME_CHANGE", - typeChange = "TYPE_CHANGE", - new = "NEW_COLUMN", - settings = "COLUMN_SETTINGS", -} - -type SelectedColumnHeader = { - column: Column & { [key: string]: any }; - anchorEl: PopoverProps["anchorEl"]; -}; - -export type ColumnMenuRef = { - selectedColumnHeader: SelectedColumnHeader | null; - setSelectedColumnHeader: React.Dispatch< - React.SetStateAction - >; -}; - -export interface IMenuModalProps { - name: string; - fieldName: string; - type: FieldType; - - open: boolean; - config: Record; - - handleClose: () => void; - handleSave: ( - fieldName: string, - config: Record, - onSuccess?: Function - ) => void; -} - -export default function ColumnMenu() { - const [modal, setModal] = useState(INITIAL_MODAL); - const { tableState, tableActions, columnMenuRef } = useProjectContext(); - const { requestConfirmation } = useConfirmation(); - - const [selectedColumnHeader, setSelectedColumnHeader] = useState(null); - if (columnMenuRef) - columnMenuRef.current = { - selectedColumnHeader, - setSelectedColumnHeader, - } as any; - - const { column, anchorEl } = (selectedColumnHeader ?? {}) as any; - - useEffect(() => { - if (column && column.type === FieldType.last) { - setModal({ - type: ModalStates.new, - data: {}, - }); - } - }, [column]); - if (!tableState || !tableActions) return null; - const { orderBy } = tableState; - - const actions = tableActions!.column; - - const handleClose = () => { - if (!setSelectedColumnHeader) return; - setSelectedColumnHeader({ - column: column!, - anchorEl: null, - }); - setTimeout(() => setSelectedColumnHeader(null), 300); - }; - - const isConfigurable = Boolean( - getFieldProp("settings", column?.type) || - getFieldProp("initializable", column?.type) - ); - - if (!column) return null; - const _sortKey = getFieldProp("sortKey", (column as any).type); - const sortKey = _sortKey ? `${column.key}.${_sortKey}` : column.key; - const isSorted = orderBy?.[0]?.key === sortKey; - const isAsc = isSorted && orderBy?.[0]?.direction === "asc"; - - const clearModal = () => { - setModal(INITIAL_MODAL); - setTimeout(() => handleClose(), 300); - }; - - const handleModalSave = ( - key: string, - update: Record, - onSuccess?: Function - ) => { - actions.update(key, update, onSuccess); - }; - const openSettings = (column) => { - setSelectedColumnHeader({ - column, - }); - setModal({ type: ModalStates.settings, data: { column } }); - }; - const menuItems = [ - { type: "subheader" }, - { - label: "Lock", - activeLabel: "Unlock", - icon: , - activeIcon: , - onClick: () => { - actions.update(column.key, { editable: !column.editable }); - handleClose(); - }, - active: !column.editable, - }, - { - label: "Freeze", - activeLabel: "Unfreeze", - icon: , - activeIcon: , - onClick: () => { - actions.update(column.key, { fixed: !column.fixed }); - handleClose(); - }, - active: column.fixed, - }, - { - label: "Enable resize", - activeLabel: "Disable resize", - icon: , - onClick: () => { - actions.update(column.key, { resizable: !column.resizable }); - handleClose(); - }, - active: column.resizable, - }, - { - label: "Sort: descending", - activeLabel: "Sorted: descending", - icon: , - onClick: () => { - tableActions.table.orderBy( - isSorted && !isAsc ? [] : [{ key: sortKey, direction: "desc" }] - ); - handleClose(); - }, - active: isSorted && !isAsc, - disabled: column.type === FieldType.id, - }, - { - label: "Sort: ascending", - activeLabel: "Sorted: ascending", - icon: , - onClick: () => { - tableActions.table.orderBy( - isSorted && isAsc ? [] : [{ key: sortKey, direction: "asc" }] - ); - handleClose(); - }, - active: isSorted && isAsc, - disabled: column.type === FieldType.id, - }, - { type: "subheader" }, - { - label: "Add new to left…", - icon: , - onClick: () => - setModal({ - type: ModalStates.new, - data: { - insert: "left", - sourceIndex: column.index, - }, - }), - }, - { - label: "Add new to right…", - icon: , - onClick: () => - setModal({ - type: ModalStates.new, - data: { - insert: "right", - sourceIndex: column.index, - }, - }), - }, - { type: "subheader" }, - { - label: "Rename…", - icon: , - onClick: () => { - setModal({ type: ModalStates.nameChange, data: {} }); - }, - }, - { - label: `Edit type: ${getFieldProp("name", column.type)}…`, - // This is based off the cell type - icon: getFieldProp("icon", column.type), - onClick: () => { - setModal({ type: ModalStates.typeChange, data: { column } }); - }, - }, - { - label: `Column settings…`, - // This is based off the cell type - icon: , - onClick: () => { - openSettings(column); - }, - disabled: !isConfigurable, - }, - // { - // label: "Re-order", - // icon: , - // onClick: () => alert("REORDER"), - // }, - - // { - // label: "Hide for everyone", - // activeLabel: "Show", - // icon: , - // activeIcon: , - // onClick: () => { - // actions.update(column.key, { hidden: !column.hidden }); - // handleClose(); - // }, - // active: column.hidden, - // color: "error" as "error", - // }, - { - label: "Delete column…", - icon: , - onClick: () => - requestConfirmation({ - title: "Delete column?", - customBody: ( - <> - - Only the column configuration will be deleted. No data will be - deleted. - - - - Key: {column.key} - - - ), - confirm: "Delete", - confirmColor: "error", - handleConfirm: async () => { - actions.remove(column.key); - await analytics.logEvent("delete_column", { type: column.type }); - handleClose(); - }, - }), - color: "error" as "error", - }, - ]; - - const menuModalProps = { - name: column.name, - fieldName: column.key, - type: column.type, - - open: modal.type === ModalStates.typeChange, - config: column.config, - - handleClose: clearModal, - handleSave: handleModalSave, - }; - - return ( - <> - {column.type !== FieldType.last && ( - - - - {getFieldProp("icon", column.type)} - - - Key: {column.key} - - } - primaryTypographyProps={{ variant: "subtitle2" }} - secondaryTypographyProps={{ variant: "caption" }} - sx={{ m: 0, minHeight: 40, "& > *": { userSelect: "none" } }} - /> - - - - )} - {column && ( - <> - - - - - - )} - - ); -} diff --git a/src/components/Table/ContextMenu/MenuContent.tsx b/src/components/Table/ContextMenu/MenuContent.tsx deleted file mode 100644 index 8e28bfd6..00000000 --- a/src/components/Table/ContextMenu/MenuContent.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { Divider, Menu } from "@mui/material"; -import { default as MenuItem } from "./MenuItem"; -import { IContextMenuItem } from "./MenuItem"; - -interface IMenuContents { - anchorEl: HTMLElement; - open: boolean; - handleClose: () => void; - groups: IContextMenuItem[][]; -} - -export default function MenuContents({ - anchorEl, - open, - handleClose, - groups, -}: IMenuContents) { - const handleContext = (e: React.MouseEvent) => e.preventDefault(); - - return ( - - {groups.map((items, groupIndex) => ( - <> - {groupIndex > 0 && } - {items.map((item, index: number) => ( - - ))} - - ))} - - ); -} diff --git a/src/components/Table/ContextMenu/MenuItem.tsx b/src/components/Table/ContextMenu/MenuItem.tsx deleted file mode 100644 index 63eaa833..00000000 --- a/src/components/Table/ContextMenu/MenuItem.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { - ListItemIcon, - ListItemText, - MenuItem, - MenuItemProps, - Typography, -} from "@mui/material"; - -export interface IContextMenuItem extends Partial { - onClick: () => void; - icon: JSX.Element; - label: string; - disabled?: boolean; - hotkeyLabel?: string; -} - -export default function ContextMenuItem({ - onClick, - icon, - label, - disabled, - hotkeyLabel, - ...props -}: IContextMenuItem) { - return ( - - {icon} - {label} - {hotkeyLabel && ( - - {hotkeyLabel} - - )} - - ); -} diff --git a/src/components/Table/ContextMenu/index.tsx b/src/components/Table/ContextMenu/index.tsx deleted file mode 100644 index 1475f4b6..00000000 --- a/src/components/Table/ContextMenu/index.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import _find from "lodash/find"; -import { getFieldProp } from "@src/components/fields"; - -import MenuContents from "./MenuContent"; -import DuplicateIcon from "@src/assets/icons/CopyCells"; -import DeleteIcon from "@mui/icons-material/DeleteOutlined"; -import LinkIcon from "@mui/icons-material/Link"; - -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { useContextMenuAtom } from "@src/atoms/ContextMenu"; -import { FieldType } from "@src/constants/fields"; - -import { useAppContext } from "@src/contexts/AppContext"; -import { IContextMenuItem } from "./MenuItem"; -import { useConfirmation } from "@src/components/ConfirmationDialog/Context"; - -export default function ContextMenu() { - const { requestConfirmation } = useConfirmation(); - const { tableState, deleteRow, addRow } = useProjectContext(); - const { userRoles } = useAppContext(); - - const { anchorEle, selectedCell, resetContextMenu } = useContextMenuAtom(); - - const columns = tableState?.columns; - const selectedColIndex = selectedCell?.colIndex; - const selectedColumn = _find(columns, { index: selectedColIndex }); - - if (!selectedColumn || !anchorEle) return null; - - const menuActions = getFieldProp("contextMenuActions", selectedColumn.type); - const actionGroups: IContextMenuItem[][] = []; - - const actions = menuActions - ? menuActions(selectedCell, resetContextMenu) - : []; - if (actions.length > 0) actionGroups.push(actions); - - if (selectedColumn.type === FieldType.derivative) { - const renderedFieldMenuActions = getFieldProp( - "contextMenuActions", - selectedColumn.config.renderFieldType - ); - if (renderedFieldMenuActions) { - actionGroups.push( - renderedFieldMenuActions(selectedCell, resetContextMenu) - ); - } - } - - const row = tableState?.rows[selectedCell!.rowIndex]; - if (row) { - const rowActions = [ - { - label: "Copy link to row", - icon: , - onClick: () => { - const rowRef = encodeURIComponent(row.ref.path); - navigator.clipboard.writeText( - window.location.href + `?rowRef=${rowRef}` - ); - }, - }, - { - label: "Duplicate row", - icon: , - onClick: () => { - const { ref, ...clonedRow } = row; - addRow!(clonedRow, undefined, { type: "smaller" }); - resetContextMenu(); - }, - }, - { - label: "Delete row…", - color: "error", - icon: , - onClick: () => { - requestConfirmation({ - title: "Delete row?", - customBody: ( - <> - Row path: -
    - - {row.ref.path} - - - ), - confirm: "Delete", - confirmColor: "error", - handleConfirm: () => deleteRow?.(row.ref), - }); - resetContextMenu(); - }, - }, - ]; - actionGroups.push(rowActions); - } - - return ( - - ); -} diff --git a/src/components/Table/EmptyTable.tsx b/src/components/Table/EmptyTable.tsx deleted file mode 100644 index 2787abc8..00000000 --- a/src/components/Table/EmptyTable.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { Grid, Stack, Typography, Button, Divider } from "@mui/material"; -import ImportIcon from "@src/assets/icons/Import"; -import AddColumnIcon from "@src/assets/icons/AddColumn"; - -import { APP_BAR_HEIGHT } from "@src/components/Navigation"; - -import { useProjectContext } from "@src/contexts/ProjectContext"; -import ColumnMenu from "./ColumnMenu"; -import ImportWizard from "@src/components/Wizards/ImportWizard"; -import ImportCSV from "@src/components/TableHeader/ImportCsv"; - -export default function EmptyTable() { - const { tableState, importWizardRef, columnMenuRef } = useProjectContext(); - - let contents = <>; - - if (tableState?.rows && tableState!.rows.length > 0) { - contents = ( - <> -
    - - Get started - - - There is existing data in the Firestore collection: -
    - {tableState?.tablePath} -
    -
    - -
    - - You can import that existing data to this table. - - - - - -
    - - ); - } else { - contents = ( - <> -
    - - Get started - - - There is no data in the Firestore collection: -
    - {tableState?.tablePath} -
    -
    - - - - - You can import data from an external CSV file: - - - ( - - )} - PopoverProps={{ - anchorOrigin: { - vertical: "bottom", - horizontal: "center", - }, - transformOrigin: { - vertical: "top", - horizontal: "center", - }, - }} - /> - - - - - or - - - - - - You can manually add new columns and rows: - - - - - - - - - ); - } - - return ( - - {contents} - - ); -} diff --git a/src/components/Table/FinalColumnHeader.tsx b/src/components/Table/FinalColumnHeader.tsx deleted file mode 100644 index 5e5f0b7e..00000000 --- a/src/components/Table/FinalColumnHeader.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Column } from "react-data-grid"; - -import { Button } from "@mui/material"; -import AddColumnIcon from "@src/assets/icons/AddColumn"; - -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; - -const FinalColumnHeader: Column["headerRenderer"] = ({ column }) => { - const { userClaims } = useAppContext(); - const { columnMenuRef } = useProjectContext(); - if (!columnMenuRef) return null; - - if (!userClaims?.roles.includes("ADMIN")) return null; - - const handleClick = ( - event: React.MouseEvent - ) => - columnMenuRef?.current?.setSelectedColumnHeader({ - column, - anchorEl: event.currentTarget, - }); - - return ( - - ); -}; - -export default FinalColumnHeader; diff --git a/src/components/Table/HotKeys.tsx b/src/components/Table/HotKeys.tsx deleted file mode 100644 index c359fd55..00000000 --- a/src/components/Table/HotKeys.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import useHotkeys from "../../hooks/useHotkeys"; -import { FieldType } from "@src/constants/fields"; -import { useAppContext } from "@src/contexts/AppContext"; - -// TODO: Hook up to ProjectContext -const onSubmit: any = () => () => {}; - -/** - * Listens Hot Keys combination keys to trigger keyboard shortcuts - */ -const Hotkeys = (props: any) => { - const { selectedCell } = props; - const { currentUser } = useAppContext(); - - useHotkeys( - "cmd+c", - () => { - handleCopy(); - }, - [selectedCell] - ); - useHotkeys( - "ctrl+c", - () => { - handleCopy(); - }, - [selectedCell] - ); - useHotkeys( - "cmd+v", - () => { - handlePaste(); - }, - [selectedCell] - ); - useHotkeys( - "ctrl+v", - () => { - handlePaste(); - }, - [selectedCell] - ); - useHotkeys( - "ctrl+x", - () => { - handleCut(); - }, - [selectedCell] - ); - useHotkeys( - "cmd+x", - () => { - handleCut(); - }, - [selectedCell] - ); - const stringFields = [ - FieldType.email, - FieldType.shortText, - FieldType.phone, - FieldType.singleSelect, - FieldType.longText, - FieldType.url, - ]; - const numberFields = [FieldType.number, FieldType.rating]; - /** - * populate cell from clipboard - */ - const handlePaste = async () => { - const { row, column } = selectedCell; - const newValue = await navigator.clipboard.readText(); - if (stringFields.includes(column.type)) - onSubmit(column.key, row, currentUser?.uid)(newValue); - else if (numberFields.includes(column.type)) { - const numberValue = parseInt(newValue, 10); - if (`${numberValue}` !== "NaN") { - onSubmit(column.key, row, currentUser?.uid)(numberValue); - } - } - }; - const supportedFields = [...stringFields, ...numberFields]; - /** - * copy cell content to clipboard works only on supported fields - */ - const handleCopy = () => { - const { row, column } = selectedCell; - if (supportedFields.includes(column.type)) { - navigator.clipboard.writeText(row[column.key]); - } - }; - /** - * copy cell content to clipboard and clears cell(only on supported fields) - */ - const handleCut = () => { - const { row, column } = selectedCell; - if (supportedFields.includes(column.type)) { - navigator.clipboard.writeText(row[column.key]); - onSubmit(column.key, row)(null); - } - }; - return <>; -}; -export default Hotkeys; diff --git a/src/components/Table/OutOfOrderIndicator.tsx b/src/components/Table/OutOfOrderIndicator.tsx deleted file mode 100644 index 0f3ece9e..00000000 --- a/src/components/Table/OutOfOrderIndicator.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import createPersistedState from "use-persisted-state"; - -import { styled } from "@mui/material/styles"; -import RichTooltip from "@src/components/RichTooltip"; -import WarningIcon from "@mui/icons-material/WarningAmber"; -import { OUT_OF_ORDER_MARGIN } from "./TableContainer"; - -const useOutOfOrderTooltipDismissedState = createPersistedState( - "__ROWY__OUT_OF_ORDER_TOOLTIP_DISMISSED" -); - -const Dot = styled("div")(({ theme }) => ({ - position: "absolute", - left: -6, - top: "50%", - transform: "translateY(-50%)", - zIndex: 1, - - width: 12, - height: 12, - - borderRadius: "50%", - backgroundColor: theme.palette.warning.main, -})); - -export interface IOutOfOrderIndicatorProps { - top: number; - height: number; -} - -export default function OutOfOrderIndicator({ - top, - height, -}: IOutOfOrderIndicatorProps) { - const [dismissed, setDismissed] = useOutOfOrderTooltipDismissedState(false); - - return ( -
    - } - title="Row out of order" - message="This row will not appear on the top of the table after you reload this page" - placement="right" - render={({ openTooltip }) => } - defaultOpen={!dismissed} - onClose={() => setDismissed(true)} - /> -
    - ); -} diff --git a/src/components/Table/Skeleton/TableHeaderSkeleton.tsx b/src/components/Table/Skeleton/TableHeaderSkeleton.tsx index e6f12ecb..02708be9 100644 --- a/src/components/Table/Skeleton/TableHeaderSkeleton.tsx +++ b/src/components/Table/Skeleton/TableHeaderSkeleton.tsx @@ -1,11 +1,16 @@ -import { Fade, Stack, Button } from "@mui/material"; -import Skeleton from "@mui/material/Skeleton"; +import { Fade, Stack, Button, Skeleton, SkeletonProps } from "@mui/material"; import AddRowIcon from "@src/assets/icons/AddRow"; -import { TABLE_HEADER_HEIGHT } from "@src/components/TableHeader"; +// TODO: +// import { TABLE_HEADER_HEIGHT } from "@src/components/TableHeader"; +const TABLE_HEADER_HEIGHT = 44; -const ButtonSkeleton = (props) => ( - +const ButtonSkeleton = (props: Partial) => ( + ); export default function TableHeaderSkeleton() { diff --git a/src/components/Table/TableContainer.tsx b/src/components/Table/TableContainer.tsx deleted file mode 100644 index 3b67d858..00000000 --- a/src/components/Table/TableContainer.tsx +++ /dev/null @@ -1,228 +0,0 @@ -import { styled, alpha, darken, lighten } from "@mui/material"; -import { APP_BAR_HEIGHT } from "@src/components/Navigation"; -import { DRAWER_COLLAPSED_WIDTH } from "@src/components/SideDrawer"; - -import { colord, extend } from "colord"; -import mixPlugin from "colord/plugins/lch"; -extend([mixPlugin]); - -export const OUT_OF_ORDER_MARGIN = 8; - -export const TableContainer = styled("div", { - shouldForwardProp: (prop) => prop !== "rowHeight", -})<{ rowHeight: number }>(({ theme, rowHeight }) => ({ - display: "flex", - flexDirection: "column", - height: `calc(100vh - ${APP_BAR_HEIGHT}px)`, - - "& > .rdg": { - width: `calc(100% - ${DRAWER_COLLAPSED_WIDTH}px)`, - flex: 1, - paddingBottom: `max(env(safe-area-inset-bottom), ${theme.spacing(2)})`, - }, - - [theme.breakpoints.down("sm")]: { width: "100%" }, - - "& .rdg": { - "--color": theme.palette.text.primary, - "--border-color": theme.palette.divider, - // "--summary-border-color": "#aaa", - "--background-color": - theme.palette.mode === "light" - ? theme.palette.background.paper - : colord(theme.palette.background.paper) - .mix("#fff", 0.04) - .alpha(1) - .toHslString(), - "--header-background-color": theme.palette.background.default, - "--row-hover-background-color": colord(theme.palette.background.paper) - .mix(theme.palette.action.hover, theme.palette.action.hoverOpacity) - .alpha(1) - .toHslString(), - "--row-selected-background-color": - theme.palette.mode === "light" - ? lighten(theme.palette.primary.main, 0.9) - : darken(theme.palette.primary.main, 0.8), - "--row-selected-hover-background-color": - theme.palette.mode === "light" - ? lighten(theme.palette.primary.main, 0.8) - : darken(theme.palette.primary.main, 0.7), - "--checkbox-color": theme.palette.primary.main, - "--checkbox-focus-color": theme.palette.primary.main, - "--checkbox-disabled-border-color": "#ccc", - "--checkbox-disabled-background-color": "#ddd", - "--selection-color": theme.palette.primary.main, - "--font-size": "0.75rem", - "--cell-padding": theme.spacing(0, 1.25), - - border: "none", - backgroundColor: "transparent", - - ...(theme.typography.caption as any), - // fontSize: "0.8125rem", - lineHeight: "inherit !important", - - "& .rdg-cell": { - display: "flex", - alignItems: "center", - padding: 0, - - overflow: "visible", - contain: "none", - position: "relative", - - lineHeight: "calc(var(--row-height) - 1px)", - }, - - "& .rdg-cell-frozen": { - position: "sticky", - }, - "& .rdg-cell-frozen-last": { - boxShadow: theme.shadows[2] - .replace(/, 0 (\d+px)/g, ", $1 0") - .split("),") - .slice(1) - .join("),"), - - "&[aria-selected=true]": { - boxShadow: - theme.shadows[2] - .replace(/, 0 (\d+px)/g, ", $1 0") - .split("),") - .slice(1) - .join("),") + ", inset 0 0 0 2px var(--selection-color)", - }, - }, - - "& .rdg-cell-copied": { - backgroundColor: - theme.palette.mode === "light" - ? lighten(theme.palette.primary.main, 0.7) - : darken(theme.palette.primary.main, 0.6), - }, - }, - - ".rdg-row, .rdg-header-row": { - marginLeft: `max(env(safe-area-inset-left), ${theme.spacing(2)})`, - marginRight: `max(env(safe-area-inset-right), ${theme.spacing(8)})`, - display: "inline-grid", // Fix Safari not showing margin-right - }, - - ".rdg-header-row .rdg-cell:first-child": { - borderTopLeftRadius: theme.shape.borderRadius, - }, - ".rdg-header-row .rdg-cell:last-child": { - borderTopRightRadius: theme.shape.borderRadius, - }, - - ".rdg-header-row .rdg-cell.final-column-header": { - border: "none", - padding: theme.spacing(0, 0.75), - borderBottomRightRadius: theme.shape.borderRadius, - - display: "flex", - alignItems: "center", - justifyContent: "flex-start", - - position: "relative", - "&::before": { - content: "''", - display: "block", - width: 88, - height: "100%", - - position: "absolute", - top: 0, - left: 0, - - border: "1px solid var(--border-color)", - borderLeftWidth: 0, - borderTopRightRadius: theme.shape.borderRadius, - borderBottomRightRadius: theme.shape.borderRadius, - }, - }, - - ".rdg-row .rdg-cell:first-child, .rdg-header-row .rdg-cell:first-child": { - borderLeft: "1px solid var(--border-color)", - }, - - ".rdg-row:last-child": { - borderBottomLeftRadius: theme.shape.borderRadius, - borderBottomRightRadius: theme.shape.borderRadius, - - "& .rdg-cell:first-child": { - borderBottomLeftRadius: theme.shape.borderRadius, - }, - "& .rdg-cell:nth-last-child(2)": { - borderBottomRightRadius: theme.shape.borderRadius, - }, - }, - - ".rdg-header-row .rdg-cell": { - borderTop: "1px solid var(--border-color)", - }, - - ".rdg-row:hover": { color: theme.palette.text.primary }, - - ".row-hover-iconButton": { - color: theme.palette.text.disabled, - transitionDuration: "0s", - }, - ".rdg-row:hover .row-hover-iconButton": { - color: theme.palette.text.primary, - backgroundColor: alpha( - theme.palette.action.hover, - theme.palette.action.hoverOpacity * 1.5 - ), - }, - - ".cell-collapse-padding": { - margin: theme.spacing(0, -1.25), - width: `calc(100% + ${theme.spacing(1.25 * 2)})`, - }, - - ".rdg-row.out-of-order": { - "--row-height": rowHeight + 1 + "px !important", - marginTop: -1, - marginBottom: OUT_OF_ORDER_MARGIN, - borderBottomLeftRadius: theme.shape.borderRadius, - - "& .rdg-cell:not(:last-child)": { - borderTop: `1px solid var(--border-color)`, - }, - "& .rdg-cell:first-child": { - borderBottomLeftRadius: theme.shape.borderRadius, - }, - "& .rdg-cell:nth-last-child(2)": { - borderBottomRightRadius: theme.shape.borderRadius, - }, - "&:not(:nth-child(4))": { - borderTopLeftRadius: theme.shape.borderRadius, - - "& .rdg-cell:first-child": { - borderTopLeftRadius: theme.shape.borderRadius, - }, - "& .rdg-cell:nth-last-child(2)": { - borderTopRightRadius: theme.shape.borderRadius, - }, - }, - - "& + .rdg-row:not(.out-of-order)": { - "--row-height": rowHeight + 1 + "px !important", - marginTop: -1, - borderTopLeftRadius: theme.shape.borderRadius, - - "& .rdg-cell:not(:last-child)": { - borderTop: `1px solid var(--border-color)`, - }, - "& .rdg-cell:first-child": { - borderTopLeftRadius: theme.shape.borderRadius, - }, - "& .rdg-cell:nth-last-child(2)": { - borderTopRightRadius: theme.shape.borderRadius, - }, - }, - }, -})); - -export default TableContainer; diff --git a/src/components/Table/TableRow.tsx b/src/components/Table/TableRow.tsx deleted file mode 100644 index 29d6b15e..00000000 --- a/src/components/Table/TableRow.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { useSetAnchorEle } from "@src/atoms/ContextMenu"; -import { Fragment } from "react"; -import { Row, RowRendererProps } from "react-data-grid"; - -import OutOfOrderIndicator from "./OutOfOrderIndicator"; - -export default function TableRow(props: RowRendererProps) { - const { setAnchorEle } = useSetAnchorEle(); - const handleContextMenu = ( - e: React.MouseEvent - ) => { - e.preventDefault(); - setAnchorEle?.(e?.target as HTMLElement); - }; - if (props.row._rowy_outOfOrder) - return ( - - - - - ); - - return ; -} diff --git a/src/components/Table/editors/NullEditor.tsx b/src/components/Table/editors/NullEditor.tsx deleted file mode 100644 index 9a9c3ebc..00000000 --- a/src/components/Table/editors/NullEditor.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from "react"; -import { EditorProps } from "react-data-grid"; -// import _findIndex from "lodash/findIndex"; - -import { withStyles, WithStyles } from "@mui/styles"; -import styles from "./styles"; - -/** - * Allow the cell to be editable, but disable react-data-grid’s default - * text editor to show. - * - * Hides the editor container so the cell below remains editable inline. - * - * Use for cells that have inline editing and don’t need to be double-clicked. - * - * TODO: fix NullEditor overwriting the formatter component - */ -class NullEditor extends React.Component< - EditorProps & WithStyles -> { - getInputNode = () => null; - getValue = () => null; - render = () => null; -} - -export default withStyles(styles)(NullEditor); diff --git a/src/components/Table/editors/TextEditor.tsx b/src/components/Table/editors/TextEditor.tsx deleted file mode 100644 index b10e09e2..00000000 --- a/src/components/Table/editors/TextEditor.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { useRef, useLayoutEffect } from "react"; -import { EditorProps } from "react-data-grid"; - -import { TextField } from "@mui/material"; - -import { FieldType } from "@src/constants/fields"; -import { getCellValue } from "@src/utils/fns"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { getColumnType } from "@src/components/fields"; - -export default function TextEditor({ row, column }: EditorProps) { - const { updateCell } = useProjectContext(); - - const type = getColumnType(column as any); - - const cellValue = getCellValue(row, column.key); - const defaultValue = - type === FieldType.percentage && typeof cellValue === "number" - ? cellValue * 100 - : cellValue; - - const inputRef = useRef(null); - - useLayoutEffect(() => { - return () => { - const newValue = inputRef.current?.value; - if (newValue !== undefined && updateCell) { - if (type === FieldType.number) { - updateCell(row.ref, column.key, Number(newValue)); - } else if (type === FieldType.percentage) { - updateCell(row.ref, column.key, Number(newValue) / 100); - } else { - updateCell(row.ref, column.key, newValue); - } - } - }; - }, []); - - let inputType = "text"; - switch (type) { - case FieldType.email: - inputType = "email"; - break; - case FieldType.phone: - inputType = "tel"; - break; - case FieldType.url: - inputType = "url"; - break; - case FieldType.number: - case FieldType.percentage: - inputType = "number"; - break; - - default: - break; - } - - const { maxLength } = (column as any).config; - - return ( - theme.typography.body2.lineHeight, - maxHeight: "100%", - boxSizing: "border-box", - py: 3 / 8, - }, - }} - InputProps={{ - endAdornment: - (column as any).type === FieldType.percentage ? "%" : undefined, - }} - autoFocus - onKeyDown={(e) => { - if (e.key === "ArrowLeft" || e.key === "ArrowRight") { - e.stopPropagation(); - } - - if (e.key === "Escape") { - (e.target as any).value = defaultValue; - } - }} - /> - ); -} diff --git a/src/components/Table/editors/styles.ts b/src/components/Table/editors/styles.ts deleted file mode 100644 index 0eb31315..00000000 --- a/src/components/Table/editors/styles.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createStyles } from "@mui/material"; - -export const styles = createStyles({ - "@global": { - ".rdg-editor-container": { display: "none" }, - }, -}); - -export default styles; diff --git a/src/components/Table/editors/withNullEditor.tsx b/src/components/Table/editors/withNullEditor.tsx deleted file mode 100644 index dda14116..00000000 --- a/src/components/Table/editors/withNullEditor.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { EditorProps } from "react-data-grid"; -import { IHeavyCellProps } from "@src/components/fields/types"; - -import { getCellValue } from "@src/utils/fns"; - -/** - * Allow the cell to be editable, but disable react-data-grid’s default - * text editor to show. - * - * Hides the editor container so the cell below remains editable inline. - * - * Use for cells that have inline editing and don’t need to be double-clicked. - */ -export default function withNullEditor( - HeavyCell?: React.ComponentType -) { - return function NullEditor(props: EditorProps) { - const { row, column } = props; - - return HeavyCell ? ( -
    - {}} - disabled={props.column.editable === false} - /> -
    - ) : null; - }; -} diff --git a/src/components/Table/editors/withSideDrawerEditor.tsx b/src/components/Table/editors/withSideDrawerEditor.tsx deleted file mode 100644 index 88322eec..00000000 --- a/src/components/Table/editors/withSideDrawerEditor.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useEffect } from "react"; -import { EditorProps } from "react-data-grid"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { IHeavyCellProps } from "@src/components/fields/types"; - -import { getCellValue } from "@src/utils/fns"; - -/** - * Allow the cell to be editable, but disable react-data-grid’s default - * text editor to show. Opens the side drawer in the appropriate position. - * - * Displays the current HeavyCell or HeavyCell since it overwrites cell contents. - * - * Use for cells that do not support any type of in-cell editing. - */ -export default function withSideDrawerEditor( - HeavyCell?: React.ComponentType -) { - return function SideDrawerEditor(props: EditorProps) { - const { row, column } = props; - const { sideDrawerRef } = useProjectContext(); - - useEffect(() => { - if (!sideDrawerRef?.current?.open && sideDrawerRef?.current?.setOpen) - sideDrawerRef?.current?.setOpen(true); - }, [column]); - - return HeavyCell ? ( -
    - {}} - disabled={props.column.editable === false} - /> -
    - ) : null; - }; -} diff --git a/src/components/Table/formatters/ChipList.tsx b/src/components/Table/formatters/ChipList.tsx deleted file mode 100644 index 5aaccab2..00000000 --- a/src/components/Table/formatters/ChipList.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Grid } from "@mui/material"; -import { useProjectContext } from "@src/contexts/ProjectContext"; - -export default function ChipList({ children }: React.PropsWithChildren<{}>) { - const { tableState } = useProjectContext(); - - const rowHeight = tableState?.config.rowHeight ?? 41; - const canWrap = rowHeight > 24 * 2 + 4; - - return ( - `calc(100% + ${theme.spacing(0.5)})`, - py: 0.5, - - "& .MuiChip-root": { - height: 24, - lineHeight: (theme) => theme.typography.caption.lineHeight, - font: "inherit", - letterSpacing: "inherit", - display: "flex", - cursor: "inherit", - }, - }} - > - {children} - - ); -} diff --git a/src/components/Table/formatters/FinalColumn.tsx b/src/components/Table/formatters/FinalColumn.tsx deleted file mode 100644 index 2d0347b2..00000000 --- a/src/components/Table/formatters/FinalColumn.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { FormatterProps } from "react-data-grid"; - -import { makeStyles, createStyles } from "@mui/styles"; -import { Stack, Tooltip, IconButton, alpha } from "@mui/material"; -import CopyCellsIcon from "@src/assets/icons/CopyCells"; -import DeleteIcon from "@mui/icons-material/DeleteOutlined"; - -import { useConfirmation } from "@src/components/ConfirmationDialog/Context"; -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import useKeyPress from "@src/hooks/useKeyPress"; -import { isCollectionGroup } from "@src/utils/fns"; - -const useStyles = makeStyles((theme) => - createStyles({ - "@global": { - ".final-column-cell": { - ".rdg.rdg .rdg-cell&": { - backgroundColor: "var(--header-background-color)", - borderColor: "var(--header-background-color)", - color: theme.palette.text.disabled, - padding: "var(--cell-padding)", - }, - }, - }, - }) -); - -export default function FinalColumn({ row }: FormatterProps) { - useStyles(); - - const { userClaims } = useAppContext(); - const { requestConfirmation } = useConfirmation(); - const { deleteRow, addRow, table } = useProjectContext(); - const altPress = useKeyPress("Alt"); - - const handleDelete = () => { - if (deleteRow) deleteRow(row.ref); - }; - - if (!userClaims?.roles.includes("ADMIN") && table?.readOnly === true) - return null; - return ( - - {!isCollectionGroup() && ( - - { - const { ref, ...clonedRow } = row; - addRow!(clonedRow, undefined, { type: "smaller" }); - }} - aria-label="Duplicate row" - className="row-hover-iconButton" - > - - - - )} - - - { - requestConfirmation({ - title: "Delete row?", - customBody: ( - <> - Row path: -
    - - {row.ref.path} - - - ), - confirm: "Delete", - confirmColor: "error", - handleConfirm: handleDelete, - }); - } - } - aria-label={`Delete row${altPress ? "" : "…"}`} - className="row-hover-iconButton" - sx={{ - ".rdg-row:hover &.row-hover-iconButton": { - color: "error.main", - backgroundColor: (theme) => - alpha( - theme.palette.error.main, - theme.palette.action.hoverOpacity * 2 - ), - }, - }} - > - -
    -
    -
    - ); -} diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx deleted file mode 100644 index 38f6724a..00000000 --- a/src/components/Table/index.tsx +++ /dev/null @@ -1,287 +0,0 @@ -import React, { useEffect, useRef, useMemo, useState } from "react"; -import _orderBy from "lodash/orderBy"; -import _find from "lodash/find"; -import _findIndex from "lodash/findIndex"; -import _difference from "lodash/difference"; -import _get from "lodash/get"; - -import { DndProvider } from "react-dnd"; -import { HTML5Backend } from "react-dnd-html5-backend"; - -// import "react-data-grid/dist/react-data-grid.css"; -import DataGrid, { - Column, - // SelectColumn as _SelectColumn, -} from "react-data-grid"; - -import Loading from "@src/components/Loading"; -import TableContainer, { OUT_OF_ORDER_MARGIN } from "./TableContainer"; -import TableHeader from "../TableHeader"; -import ColumnHeader from "./ColumnHeader"; -import ColumnMenu from "./ColumnMenu"; -import ContextMenu from "./ContextMenu"; -import FinalColumnHeader from "./FinalColumnHeader"; -import FinalColumn from "./formatters/FinalColumn"; -import TableRow from "./TableRow"; -import BulkActions from "./BulkActions"; - -import { getColumnType, getFieldProp } from "@src/components/fields"; -import { FieldType } from "@src/constants/fields"; -import { formatSubTableName } from "@src/utils/fns"; - -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import useWindowSize from "@src/hooks/useWindowSize"; -import { useSetSelectedCell } from "@src/atoms/ContextMenu"; - -export type TableColumn = Column & { - isNew?: boolean; - type: FieldType; - [key: string]: any; -}; - -const rowKeyGetter = (row: any) => row.id; -const rowClass = (row: any) => (row._rowy_outOfOrder ? "out-of-order" : ""); -//const SelectColumn = { ..._SelectColumn, width: 42, maxWidth: 42 }; - -export default function Table() { - const { - table, - tableState, - tableActions, - dataGridRef, - sideDrawerRef, - updateCell, - } = useProjectContext(); - const { userDoc, userClaims } = useAppContext(); - const { setSelectedCell } = useSetSelectedCell(); - - const userDocHiddenFields = - userDoc.state.doc?.tables?.[formatSubTableName(tableState?.config.id)] - ?.hiddenFields ?? []; - - const [columns, setColumns] = useState([]); - - useEffect(() => { - if (!tableState?.loadingColumns && tableState?.columns) { - const _columns = _orderBy( - Object.values(tableState?.columns).filter( - (column: any) => !column.hidden && column.key - ), - "index" - ) - .map((column: any) => ({ - draggable: true, - resizable: true, - frozen: column.fixed, - headerRenderer: ColumnHeader, - formatter: - getFieldProp("TableCell", getColumnType(column)) ?? - function InDev() { - return null; - }, - editor: - getFieldProp("TableEditor", getColumnType(column)) ?? - function InDev() { - return null; - }, - ...column, - editable: - table?.readOnly && !userClaims?.roles.includes("ADMIN") - ? false - : column.editable ?? true, - width: (column.width as number) - ? (column.width as number) > 380 - ? 380 - : (column.width as number) - : 150, - })) - .filter((column) => !userDocHiddenFields.includes(column.key)); - - if (!table?.readOnly || userClaims?.roles.includes("ADMIN")) { - _columns.push({ - isNew: true, - key: "new", - name: "Add column", - type: FieldType.last, - index: _columns.length ?? 0, - width: 154, - headerRenderer: FinalColumnHeader, - headerCellClass: "final-column-header", - cellClass: "final-column-cell", - formatter: FinalColumn, - editable: false, - }); - } - - setColumns(_columns); - - // setColumns([ - // // SelectColumn, - // ..._columns, - // , - // ]); - } - }, [ - tableState?.loadingColumns, - tableState?.columns, - JSON.stringify(userDocHiddenFields), - table?.readOnly, - userClaims?.roles, - ]); - - const rows = - useMemo( - () => - tableState?.rows.map((row) => - columns.reduce( - (acc, currColumn) => { - if (currColumn.key.includes(".")) { - return { - ...acc, - [currColumn.key]: _get(row, currColumn.key), - }; - } else return acc; - }, - { ...row, id: row.id as string, ref: row.ref } - ) - ), - [columns, tableState?.rows] - ) ?? []; - - const rowsContainerRef = useRef(null); - const [selectedRowsSet, setSelectedRowsSet] = useState>(); - const [selectedRows, setSelectedRows] = useState([]); - // Gets more rows when scrolled down. - // https://github.com/adazzle/react-data-grid/blob/ead05032da79d7e2b86e37cdb9af27f2a4d80b90/stories/demos/AllFeatures.tsx#L60 - const handleScroll = (event: React.UIEvent) => { - const target = event.target as HTMLDivElement; - const offset = 800; - const isAtBottom = - target.clientHeight + target.scrollTop >= target.scrollHeight - offset; - - if (!isAtBottom) return; - - // Prevent calling more rows when they’ve already been called - if (tableState!.loadingRows) return; - - // Call for 30 more rows. Note we don’t know here if there are no more - // rows left in the database. This is done in the useTable hook. - tableActions?.row.more(30); - }; - - const windowSize = useWindowSize(); - if (!windowSize || !windowSize.height) return <>; - - if (!tableActions || !tableState) return <>; - - const rowHeight = tableState.config.rowHeight ?? 42; - - return ( - <> - {/* }> - - */} - - - - {!tableState.loadingColumns ? ( - - { - if (row._rowy_outOfOrder) - return rowHeight + OUT_OF_ORDER_MARGIN + 1; - - return rowHeight; - }} - headerRowHeight={42} - className="rdg-light" // Handle dark mode in MUI theme - cellNavigationMode="LOOP_OVER_ROW" - rowRenderer={TableRow} - rowKeyGetter={rowKeyGetter} - rowClass={rowClass} - selectedRows={selectedRowsSet} - onSelectedRowsChange={(newSelectedSet) => { - const newSelectedArray = newSelectedSet - ? [...newSelectedSet] - : []; - const prevSelectedRowsArray = selectedRowsSet - ? [...selectedRowsSet] - : []; - const addedSelections = _difference( - newSelectedArray, - prevSelectedRowsArray - ); - const removedSelections = _difference( - prevSelectedRowsArray, - newSelectedArray - ); - addedSelections.forEach((id) => { - const newRow = _find(rows, { id }); - setSelectedRows([...selectedRows, newRow]); - }); - removedSelections.forEach((rowId) => { - setSelectedRows( - selectedRows.filter((row) => row.id !== rowId) - ); - }); - setSelectedRowsSet(newSelectedSet); - }} - // onRowsChange={() => { - //console.log('onRowsChange',rows) - // }} - // TODO: onFill={(e) => { - // console.log("onFill", e); - // const { columnKey, sourceRow, targetRows } = e; - // if (updateCell) - // targetRows.forEach((row) => - // updateCell(row.ref, columnKey, sourceRow[columnKey]) - // ); - // return []; - // }} - onPaste={(e) => { - const copiedValue = e.sourceRow[e.sourceColumnKey]; - if (updateCell) { - updateCell(e.targetRow.ref, e.targetColumnKey, copiedValue); - } - }} - onRowClick={(row, column) => { - if (sideDrawerRef?.current) { - sideDrawerRef.current.setCell({ - row: _findIndex(tableState.rows, { id: row.id }), - column: column.key, - }); - } - }} - onSelectedCellChange={({ rowIdx, idx }) => - setSelectedCell({ - rowIndex: rowIdx, - colIndex: idx, - }) - } - /> - - ) : ( - - )} - - - - - { - setSelectedRowsSet(new Set()); - setSelectedRows([]); - }} - /> - - ); -} diff --git a/src/components/TableHeader/AddRow.tsx b/src/components/TableHeader/AddRow.tsx deleted file mode 100644 index bc6bfa5d..00000000 --- a/src/components/TableHeader/AddRow.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import { useState, useRef } from "react"; -import createPersistedState from "use-persisted-state"; -import { FieldType, FormDialog } from "@rowy/form-builder"; - -import { - Button, - ButtonGroup, - Select, - MenuItem, - ListItemText, - Box, -} from "@mui/material"; -import AddRowIcon from "@src/assets/icons/AddRow"; -import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; - -import { useAppContext } from "@src/contexts/AppContext"; -import { useProjectContext } from "@src/contexts/ProjectContext"; -import { isCollectionGroup } from "@src/utils/fns"; -import { db } from "@src/firebase"; - -const useIdTypeState = createPersistedState("__ROWY__ADD_ROW_ID_TYPE"); - -export default function AddRow() { - const { userClaims } = useAppContext(); - const { addRow, table, tableState } = useProjectContext(); - - const anchorEl = useRef(null); - const [open, setOpen] = useState(false); - const [idType, setIdType] = useIdTypeState<"smaller" | "random" | "custom">( - "smaller" - ); - const [openIdModal, setOpenIdModal] = useState(false); - - const handleClick = () => { - if (idType === "smaller") { - addRow!(undefined, undefined, { type: "smaller" }); - } else if (idType === "random") { - addRow!(); - } else if (idType === "custom") { - setOpenIdModal(true); - } - }; - - if (table?.readOnly && !userClaims?.roles.includes("ADMIN")) - return ; - - return ( - <> - - - - - - - - - {openIdModal && ( - - value && - ( - await db - .collection(tableState!.tablePath!) - .doc(value) - .get() - ).exists === false, - ], - ], - }, - ]} - onSubmit={(v) => addRow!(undefined, undefined, v.id)} - onClose={() => setOpenIdModal(false)} - DialogProps={{ maxWidth: "xs" }} - SubmitButtonProps={{ children: "Add row" }} - /> - )} - - ); -} diff --git a/src/components/TableHeader/CloudLogs/BuildLogs/BuildLogList.tsx b/src/components/TableHeader/CloudLogs/BuildLogs/BuildLogList.tsx deleted file mode 100644 index 42f7bc4e..00000000 --- a/src/components/TableHeader/CloudLogs/BuildLogs/BuildLogList.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { useEffect, useRef } from "react"; -import useStateRef from "react-usestateref"; -import _throttle from "lodash/throttle"; - -import { Box } from "@mui/material"; - -import BuildLogRow from "./BuildLogRow"; -import CircularProgressOptical from "@src/components/CircularProgressOptical"; - -import { isTargetInsideBox } from "utils/fns"; - -export interface IBuildLogListProps - extends React.DetailedHTMLProps< - React.HTMLAttributes, - HTMLDivElement - > { - logs: Record[]; - status: string; - value: number; - index: number; -} - -export default function BuildLogList({ - logs, - status, - value, - index, - ...props -}: IBuildLogListProps) { - // useStateRef is necessary to resolve the state syncing issue - // https://stackoverflow.com/a/63039797/12208834 - const [liveStreaming, setLiveStreaming, liveStreamingStateRef] = - useStateRef(true); - const liveStreamingRef = useRef(); - const isActive = value === index; - - const handleScroll = _throttle(() => { - const target = document.querySelector("#live-stream-target"); - const scrollBox = document.querySelector("#live-stream-scroll-box"); - const liveStreamTargetVisible = isTargetInsideBox(target, scrollBox); - if (liveStreamTargetVisible !== liveStreamingStateRef.current) { - setLiveStreaming(liveStreamTargetVisible); - } - }, 500); - - const scrollToLive = () => { - const liveStreamTarget = document.querySelector("#live-stream-target"); - liveStreamTarget?.scrollIntoView?.({ - behavior: "smooth", - }); - }; - - useEffect(() => { - if (liveStreaming && isActive && status === "BUILDING") { - if (!liveStreamingRef.current) { - scrollToLive(); - } else { - setTimeout(scrollToLive, 100); - } - } - }, [logs, value]); - - useEffect(() => { - if (isActive) { - const liveStreamScrollBox = document.querySelector( - "#live-stream-scroll-box" - ); - liveStreamScrollBox!.addEventListener("scroll", () => { - handleScroll(); - }); - } - }, [value]); - - return ( -