@rebasepro/plugin-data-enhancement 0.0.1-canary.000dc36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +114 -0
- package/README.md +89 -0
- package/dist/common/src/collections/CollectionRegistry.d.ts +56 -0
- package/dist/common/src/collections/index.d.ts +1 -0
- package/dist/common/src/data/buildRebaseData.d.ts +14 -0
- package/dist/common/src/index.d.ts +3 -0
- package/dist/common/src/util/builders.d.ts +57 -0
- package/dist/common/src/util/callbacks.d.ts +6 -0
- package/dist/common/src/util/collections.d.ts +11 -0
- package/dist/common/src/util/common.d.ts +2 -0
- package/dist/common/src/util/conditions.d.ts +26 -0
- package/dist/common/src/util/entities.d.ts +58 -0
- package/dist/common/src/util/enums.d.ts +3 -0
- package/dist/common/src/util/index.d.ts +16 -0
- package/dist/common/src/util/navigation_from_path.d.ts +34 -0
- package/dist/common/src/util/navigation_utils.d.ts +20 -0
- package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
- package/dist/common/src/util/paths.d.ts +14 -0
- package/dist/common/src/util/permissions.d.ts +5 -0
- package/dist/common/src/util/references.d.ts +2 -0
- package/dist/common/src/util/relations.d.ts +22 -0
- package/dist/common/src/util/resolutions.d.ts +72 -0
- package/dist/common/src/util/storage.d.ts +24 -0
- package/dist/core/src/components/AIIcon.d.ts +16 -0
- package/dist/core/src/components/ConfirmationDialog.d.ts +9 -0
- package/dist/core/src/components/Debug/UIReferenceView.d.ts +1 -0
- package/dist/core/src/components/Debug/UIStyleGuide.d.ts +1 -0
- package/dist/core/src/components/ErrorTooltip.d.ts +2 -0
- package/dist/core/src/components/ErrorView.d.ts +21 -0
- package/dist/core/src/components/LanguageToggle.d.ts +1 -0
- package/dist/core/src/components/LoginView/LoginView.d.ts +68 -0
- package/dist/core/src/components/LoginView/index.d.ts +2 -0
- package/dist/core/src/components/NotFoundPage.d.ts +1 -0
- package/dist/core/src/components/RebaseAuth.d.ts +10 -0
- package/dist/core/src/components/RebaseLogo.d.ts +7 -0
- package/dist/core/src/components/UnsavedChangesDialog.d.ts +9 -0
- package/dist/core/src/components/UserDisplay.d.ts +7 -0
- package/dist/core/src/components/UserSelectPopover.d.ts +62 -0
- package/dist/core/src/components/UserSettingsView.d.ts +1 -0
- package/dist/core/src/components/common/index.d.ts +6 -0
- package/dist/core/src/components/common/table_height.d.ts +5 -0
- package/dist/core/src/components/common/types.d.ts +63 -0
- package/dist/core/src/components/common/useColumnsIds.d.ts +9 -0
- package/dist/core/src/components/common/useDataTableController.d.ts +45 -0
- package/dist/core/src/components/common/useDebouncedData.d.ts +9 -0
- package/dist/core/src/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/core/src/components/index.d.ts +16 -0
- package/dist/core/src/contexts/AdminModeController.d.ts +4 -0
- package/dist/core/src/contexts/AnalyticsContext.d.ts +3 -0
- package/dist/core/src/contexts/AuthControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/CustomizationControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/DataDriverContext.d.ts +3 -0
- package/dist/core/src/contexts/DatabaseAdminContext.d.ts +3 -0
- package/dist/core/src/contexts/DialogsProvider.d.ts +4 -0
- package/dist/core/src/contexts/EffectiveRoleController.d.ts +4 -0
- package/dist/core/src/contexts/InternalUserManagementContext.d.ts +3 -0
- package/dist/core/src/contexts/ModeController.d.ts +4 -0
- package/dist/core/src/contexts/RebaseClientInstanceContext.d.ts +6 -0
- package/dist/core/src/contexts/RebaseDataContext.d.ts +3 -0
- package/dist/core/src/contexts/SnackbarProvider.d.ts +2 -0
- package/dist/core/src/contexts/StorageSourceContext.d.ts +3 -0
- package/dist/core/src/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
- package/dist/core/src/contexts/index.d.ts +13 -0
- package/dist/core/src/core/PluginLifecycleManager.d.ts +17 -0
- package/dist/core/src/core/PluginProviderStack.d.ts +21 -0
- package/dist/core/src/core/Rebase.d.ts +14 -0
- package/dist/core/src/core/RebaseProps.d.ts +136 -0
- package/dist/core/src/core/RebaseRouter.d.ts +4 -0
- package/dist/core/src/core/RebaseRoutes.d.ts +17 -0
- package/dist/core/src/core/index.d.ts +4 -0
- package/dist/core/src/hooks/ApiConfigContext.d.ts +24 -0
- package/dist/core/src/hooks/data/delete.d.ts +31 -0
- package/dist/core/src/hooks/data/save.d.ts +34 -0
- package/dist/core/src/hooks/data/useCollectionFetch.d.ts +51 -0
- package/dist/core/src/hooks/data/useData.d.ts +13 -0
- package/dist/core/src/hooks/data/useDataOrder.d.ts +12 -0
- package/dist/core/src/hooks/data/useEntityFetch.d.ts +38 -0
- package/dist/core/src/hooks/data/useRelationSelector.d.ts +52 -0
- package/dist/core/src/hooks/data/useUserSelector.d.ts +31 -0
- package/dist/core/src/hooks/index.d.ts +37 -0
- package/dist/core/src/hooks/useAdminModeController.d.ts +19 -0
- package/dist/core/src/hooks/useAnalyticsController.d.ts +5 -0
- package/dist/core/src/hooks/useAuthController.d.ts +11 -0
- package/dist/core/src/hooks/useAuthSubscription.d.ts +2 -0
- package/dist/core/src/hooks/useBackendStorageSource.d.ts +30 -0
- package/dist/core/src/hooks/useBridgeRegistration.d.ts +18 -0
- package/dist/core/src/hooks/useBrowserTitleAndIcon.d.ts +6 -0
- package/dist/core/src/hooks/useBuildAdminModeController.d.ts +6 -0
- package/dist/core/src/hooks/useBuildEffectiveRoleController.d.ts +8 -0
- package/dist/core/src/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
- package/dist/core/src/hooks/useBuildModeController.d.ts +6 -0
- package/dist/core/src/hooks/useClipboard.d.ts +57 -0
- package/dist/core/src/hooks/useCollapsedGroups.d.ts +12 -0
- package/dist/core/src/hooks/useCustomizationController.d.ts +11 -0
- package/dist/core/src/hooks/useDialogsController.d.ts +11 -0
- package/dist/core/src/hooks/useEffectiveRoleController.d.ts +7 -0
- package/dist/core/src/hooks/useInternalUserManagementController.d.ts +12 -0
- package/dist/core/src/hooks/useLargeLayout.d.ts +1 -0
- package/dist/core/src/hooks/useModeController.d.ts +19 -0
- package/dist/core/src/hooks/usePermissions.d.ts +12 -0
- package/dist/core/src/hooks/useRebaseClient.d.ts +5 -0
- package/dist/core/src/hooks/useRebaseContext.d.ts +11 -0
- package/dist/core/src/hooks/useRebaseRegistry.d.ts +34 -0
- package/dist/core/src/hooks/useSlot.d.ts +18 -0
- package/dist/core/src/hooks/useSnackbarController.d.ts +20 -0
- package/dist/core/src/hooks/useStorageSource.d.ts +7 -0
- package/dist/core/src/hooks/useStudioBridge.d.ts +91 -0
- package/dist/core/src/hooks/useTranslation.d.ts +17 -0
- package/dist/core/src/hooks/useUnsavedChangesDialog.d.ts +12 -0
- package/dist/core/src/hooks/useUserConfigurationPersistence.d.ts +8 -0
- package/dist/core/src/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/core/src/i18n/RebaseI18nProvider.d.ts +33 -0
- package/dist/core/src/index.d.ts +15 -0
- package/dist/core/src/internal/common.d.ts +3 -0
- package/dist/core/src/internal/useRestoreScroll.d.ts +6 -0
- package/dist/core/src/locales/de.d.ts +2 -0
- package/dist/core/src/locales/en.d.ts +10 -0
- package/dist/core/src/locales/es.d.ts +10 -0
- package/dist/core/src/locales/fr.d.ts +2 -0
- package/dist/core/src/locales/hi.d.ts +2 -0
- package/dist/core/src/locales/it.d.ts +2 -0
- package/dist/core/src/locales/pt.d.ts +7 -0
- package/dist/core/src/util/constants.d.ts +1 -0
- package/dist/core/src/util/createFormexStub.d.ts +2 -0
- package/dist/core/src/util/entity_cache.d.ts +27 -0
- package/dist/core/src/util/enums.d.ts +5 -0
- package/dist/core/src/util/icon_list.d.ts +5 -0
- package/dist/core/src/util/icon_synonyms.d.ts +1 -0
- package/dist/core/src/util/icons.d.ts +20 -0
- package/dist/core/src/util/index.d.ts +10 -0
- package/dist/core/src/util/previews.d.ts +4 -0
- package/dist/core/src/util/useStorageUploadController.d.ts +38 -0
- package/dist/core/src/util/useTraceUpdate.d.ts +2 -0
- package/dist/formex/src/Field.d.ts +52 -0
- package/dist/formex/src/Formex.d.ts +7 -0
- package/dist/formex/src/index.d.ts +5 -0
- package/dist/formex/src/types.d.ts +40 -0
- package/dist/formex/src/useCreateFormex.d.ts +14 -0
- package/dist/formex/src/utils.d.ts +16 -0
- package/dist/index.es.js +751 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +746 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/plugin-data-enhancement/src/api.d.ts +34 -0
- package/dist/plugin-data-enhancement/src/components/DataEnhancementControllerProvider.d.ts +14 -0
- package/dist/plugin-data-enhancement/src/components/FormEnhanceAction.d.ts +10 -0
- package/dist/plugin-data-enhancement/src/editor/useEditorAIController.d.ts +4 -0
- package/dist/plugin-data-enhancement/src/index.d.ts +4 -0
- package/dist/plugin-data-enhancement/src/locales/de.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/en.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/es.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/fr.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/hi.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/it.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/locales/pt.d.ts +21 -0
- package/dist/plugin-data-enhancement/src/types/data_enhancement_controller.d.ts +71 -0
- package/dist/plugin-data-enhancement/src/types/subscriptions_message_props.d.ts +3 -0
- package/dist/plugin-data-enhancement/src/useDataEnhancementPlugin.d.ts +29 -0
- package/dist/plugin-data-enhancement/src/utils/diffStrings.d.ts +7 -0
- package/dist/plugin-data-enhancement/src/utils/properties.d.ts +3 -0
- package/dist/plugin-data-enhancement/src/utils/strings_counter.d.ts +2 -0
- package/dist/plugin-data-enhancement/src/utils/suggestions.d.ts +1 -0
- package/dist/plugin-data-enhancement/src/utils/values.d.ts +1 -0
- package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
- package/dist/types/src/controllers/auth.d.ts +119 -0
- package/dist/types/src/controllers/client.d.ts +170 -0
- package/dist/types/src/controllers/collection_registry.d.ts +46 -0
- package/dist/types/src/controllers/customization_controller.d.ts +60 -0
- package/dist/types/src/controllers/data.d.ts +168 -0
- package/dist/types/src/controllers/data_driver.d.ts +195 -0
- package/dist/types/src/controllers/database_admin.d.ts +11 -0
- package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
- package/dist/types/src/controllers/effective_role.d.ts +4 -0
- package/dist/types/src/controllers/email.d.ts +34 -0
- package/dist/types/src/controllers/index.d.ts +18 -0
- package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
- package/dist/types/src/controllers/navigation.d.ts +213 -0
- package/dist/types/src/controllers/registry.d.ts +54 -0
- package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
- package/dist/types/src/controllers/side_entity_controller.d.ts +90 -0
- package/dist/types/src/controllers/snackbar.d.ts +24 -0
- package/dist/types/src/controllers/storage.d.ts +171 -0
- package/dist/types/src/index.d.ts +4 -0
- package/dist/types/src/rebase_context.d.ts +105 -0
- package/dist/types/src/types/backend.d.ts +536 -0
- package/dist/types/src/types/backend_hooks.d.ts +187 -0
- package/dist/types/src/types/builders.d.ts +15 -0
- package/dist/types/src/types/chips.d.ts +5 -0
- package/dist/types/src/types/collections.d.ts +857 -0
- package/dist/types/src/types/cron.d.ts +102 -0
- package/dist/types/src/types/data_source.d.ts +64 -0
- package/dist/types/src/types/entities.d.ts +145 -0
- package/dist/types/src/types/entity_actions.d.ts +98 -0
- package/dist/types/src/types/entity_callbacks.d.ts +173 -0
- package/dist/types/src/types/entity_link_builder.d.ts +7 -0
- package/dist/types/src/types/entity_overrides.d.ts +10 -0
- package/dist/types/src/types/entity_views.d.ts +59 -0
- package/dist/types/src/types/export_import.d.ts +21 -0
- package/dist/types/src/types/formex.d.ts +40 -0
- package/dist/types/src/types/index.d.ts +25 -0
- package/dist/types/src/types/locales.d.ts +4 -0
- package/dist/types/src/types/modify_collections.d.ts +5 -0
- package/dist/types/src/types/plugins.d.ts +282 -0
- package/dist/types/src/types/properties.d.ts +1148 -0
- package/dist/types/src/types/property_config.d.ts +70 -0
- package/dist/types/src/types/relations.d.ts +336 -0
- package/dist/types/src/types/slots.d.ts +262 -0
- package/dist/types/src/types/translations.d.ts +874 -0
- package/dist/types/src/types/user_management_delegate.d.ts +121 -0
- package/dist/types/src/types/websockets.d.ts +78 -0
- package/dist/types/src/users/index.d.ts +2 -0
- package/dist/types/src/users/roles.d.ts +22 -0
- package/dist/types/src/users/user.d.ts +46 -0
- package/dist/ui/src/components/Alert.d.ts +12 -0
- package/dist/ui/src/components/Autocomplete.d.ts +21 -0
- package/dist/ui/src/components/Avatar.d.ts +11 -0
- package/dist/ui/src/components/Badge.d.ts +8 -0
- package/dist/ui/src/components/BooleanSwitch.d.ts +14 -0
- package/dist/ui/src/components/BooleanSwitchWithLabel.d.ts +17 -0
- package/dist/ui/src/components/Button.d.ts +14 -0
- package/dist/ui/src/components/Card.d.ts +9 -0
- package/dist/ui/src/components/CenteredView.d.ts +9 -0
- package/dist/ui/src/components/Checkbox.d.ts +13 -0
- package/dist/ui/src/components/Chip.d.ts +26 -0
- package/dist/ui/src/components/CircularProgress.d.ts +5 -0
- package/dist/ui/src/components/CircularProgressCenter.d.ts +11 -0
- package/dist/ui/src/components/Collapse.d.ts +9 -0
- package/dist/ui/src/components/ColorPicker.d.ts +30 -0
- package/dist/ui/src/components/Container.d.ts +8 -0
- package/dist/ui/src/components/DateTimeField.d.ts +24 -0
- package/dist/ui/src/components/DebouncedTextField.d.ts +2 -0
- package/dist/ui/src/components/Dialog.d.ts +39 -0
- package/dist/ui/src/components/DialogActions.d.ts +7 -0
- package/dist/ui/src/components/DialogContent.d.ts +7 -0
- package/dist/ui/src/components/DialogTitle.d.ts +10 -0
- package/dist/ui/src/components/ErrorBoundary.d.ts +11 -0
- package/dist/ui/src/components/ExpandablePanel.d.ts +12 -0
- package/dist/ui/src/components/FileUpload.d.ts +23 -0
- package/dist/ui/src/components/IconButton.d.ts +12 -0
- package/dist/ui/src/components/InfoLabel.d.ts +5 -0
- package/dist/ui/src/components/InputLabel.d.ts +11 -0
- package/dist/ui/src/components/Label.d.ts +7 -0
- package/dist/ui/src/components/LoadingButton.d.ts +7 -0
- package/dist/ui/src/components/Markdown.d.ts +10 -0
- package/dist/ui/src/components/Menu.d.ts +23 -0
- package/dist/ui/src/components/Menubar.d.ts +80 -0
- package/dist/ui/src/components/MultiSelect.d.ts +48 -0
- package/dist/ui/src/components/Paper.d.ts +6 -0
- package/dist/ui/src/components/Popover.d.ts +24 -0
- package/dist/ui/src/components/RadioGroup.d.ts +28 -0
- package/dist/ui/src/components/ResizablePanels.d.ts +18 -0
- package/dist/ui/src/components/SearchBar.d.ts +22 -0
- package/dist/ui/src/components/Select.d.ts +43 -0
- package/dist/ui/src/components/Separator.d.ts +5 -0
- package/dist/ui/src/components/Sheet.d.ts +22 -0
- package/dist/ui/src/components/Skeleton.d.ts +6 -0
- package/dist/ui/src/components/Slider.d.ts +21 -0
- package/dist/ui/src/components/Table.d.ts +34 -0
- package/dist/ui/src/components/Tabs.d.ts +19 -0
- package/dist/ui/src/components/TextField.d.ts +58 -0
- package/dist/ui/src/components/TextareaAutosize.d.ts +43 -0
- package/dist/ui/src/components/ToggleButtonGroup.d.ts +30 -0
- package/dist/ui/src/components/Tooltip.d.ts +19 -0
- package/dist/ui/src/components/Typography.d.ts +36 -0
- package/dist/ui/src/components/VirtualTable/VirtualTable.d.ts +11 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableCell.d.ts +21 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableProps.d.ts +243 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableRow.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/index.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/types.d.ts +38 -0
- package/dist/ui/src/components/common/SelectInputLabel.d.ts +5 -0
- package/dist/ui/src/components/index.d.ts +53 -0
- package/dist/ui/src/hooks/PortalContainerContext.d.ts +31 -0
- package/dist/ui/src/hooks/index.d.ts +6 -0
- package/dist/ui/src/hooks/useDebounceCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useDebounceValue.d.ts +1 -0
- package/dist/ui/src/hooks/useDebouncedCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useInjectStyles.d.ts +7 -0
- package/dist/ui/src/hooks/useOutsideAlerter.d.ts +5 -0
- package/dist/ui/src/icons/GitHubIcon.d.ts +2 -0
- package/dist/ui/src/icons/HandleIcon.d.ts +1 -0
- package/dist/ui/src/icons/Icon.d.ts +20 -0
- package/dist/ui/src/icons/cool_icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/index.d.ts +6 -0
- package/dist/ui/src/index.d.ts +5 -0
- package/dist/ui/src/styles.d.ts +12 -0
- package/dist/ui/src/util/chip_colors.d.ts +4 -0
- package/dist/ui/src/util/cls.d.ts +2 -0
- package/dist/ui/src/util/debounce.d.ts +10 -0
- package/dist/ui/src/util/hash.d.ts +1 -0
- package/dist/ui/src/util/index.d.ts +4 -0
- package/dist/ui/src/util/key_to_icon_component.d.ts +1 -0
- package/package.json +86 -0
- package/src/api.ts +198 -0
- package/src/components/DataEnhancementControllerProvider.tsx +339 -0
- package/src/components/FormEnhanceAction.tsx +273 -0
- package/src/editor/useEditorAIController.tsx +37 -0
- package/src/index.ts +10 -0
- package/src/locales/de.ts +21 -0
- package/src/locales/en.ts +21 -0
- package/src/locales/es.ts +21 -0
- package/src/locales/fr.ts +21 -0
- package/src/locales/hi.ts +21 -0
- package/src/locales/it.ts +21 -0
- package/src/locales/pt.ts +21 -0
- package/src/tests/diffStrings.test.ts +128 -0
- package/src/types/data_enhancement_controller.tsx +75 -0
- package/src/types/subscriptions_message_props.tsx +1 -0
- package/src/useDataEnhancementPlugin.tsx +66 -0
- package/src/utils/diffStrings.ts +70 -0
- package/src/utils/properties.ts +168 -0
- package/src/utils/strings_counter.ts +22 -0
- package/src/utils/suggestions.ts +6 -0
- package/src/utils/values.ts +12 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
|
|
2
|
+
import React, { useCallback, useDeferredValue, useEffect, useRef } from "react";
|
|
3
|
+
|
|
4
|
+
import { Button, CircularProgress, cls, focusedDisabled, IconButton, Menu, MenuItem, Separator, TextareaAutosize , iconSize } from "@rebasepro/ui";
|
|
5
|
+
import { XIcon, SendIcon } from "lucide-react";
|
|
6
|
+
import {
|
|
7
|
+
AIIcon,
|
|
8
|
+
useLargeLayout
|
|
9
|
+
} from "@rebasepro/core";
|
|
10
|
+
import { EntityStatus, PluginFormActionProps, Properties, Property } from "@rebasepro/types";
|
|
11
|
+
import { isPropertyBuilder, stripCollectionPath } from "@rebasepro/common";
|
|
12
|
+
import { useDataEnhancementController } from "./DataEnhancementControllerProvider";
|
|
13
|
+
import { SamplePrompt } from "../types/data_enhancement_controller";
|
|
14
|
+
|
|
15
|
+
export function FormEnhanceAction({
|
|
16
|
+
entityId,
|
|
17
|
+
path,
|
|
18
|
+
status,
|
|
19
|
+
collection,
|
|
20
|
+
formContext,
|
|
21
|
+
openEntityMode
|
|
22
|
+
}: PluginFormActionProps) {
|
|
23
|
+
|
|
24
|
+
const largeLayout = useLargeLayout();
|
|
25
|
+
|
|
26
|
+
const storageKey = createLocalStorageKey(path, status);
|
|
27
|
+
|
|
28
|
+
const [loading, setLoading] = React.useState(false);
|
|
29
|
+
const dataEnhancementController = useDataEnhancementController();
|
|
30
|
+
|
|
31
|
+
const [samplePrompts, setSamplePrompts] = React.useState<SamplePrompt[] | undefined>(undefined);
|
|
32
|
+
const [instructions, setInstructions] = React.useState<string>("");
|
|
33
|
+
|
|
34
|
+
const {
|
|
35
|
+
suggestions,
|
|
36
|
+
getSamplePrompts
|
|
37
|
+
} = dataEnhancementController;
|
|
38
|
+
|
|
39
|
+
const loadingPrompts = useRef(false);
|
|
40
|
+
const updateSuggestedPrompts = useCallback(async function updateSuggestedPrompts(instructions?: string) {
|
|
41
|
+
if (loadingPrompts.current) return;
|
|
42
|
+
loadingPrompts.current = true;
|
|
43
|
+
const prompts = status === "new"
|
|
44
|
+
? (await getSamplePrompts(collection.singularName ?? collection.name, instructions)).prompts
|
|
45
|
+
: getPromptsForExistingEntities(collection.properties);
|
|
46
|
+
|
|
47
|
+
const recentPromptsFromStorage = getRecentPromptsFromStorage(storageKey);
|
|
48
|
+
const recentPrompts = recentPromptsFromStorage.map(prompt => prompt.prompt);
|
|
49
|
+
setSamplePrompts([...recentPromptsFromStorage, ...prompts.filter(p => !recentPrompts.includes(p.prompt))].slice(0, 5));
|
|
50
|
+
loadingPrompts.current = false;
|
|
51
|
+
},
|
|
52
|
+
[collection.name, collection.singularName, getSamplePrompts, status]);
|
|
53
|
+
|
|
54
|
+
const deferredValues = useDeferredValue(formContext?.values);
|
|
55
|
+
// const enoughData = countStringCharacters(deferredValues, collection.properties) > 20;
|
|
56
|
+
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!samplePrompts) {
|
|
59
|
+
setSamplePrompts(getRecentPromptsFromStorage(storageKey));
|
|
60
|
+
updateSuggestedPrompts().then();
|
|
61
|
+
}
|
|
62
|
+
}, [samplePrompts, storageKey, updateSuggestedPrompts, instructions, status]);
|
|
63
|
+
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
updateSuggestedPrompts().then();
|
|
66
|
+
}, [status]);
|
|
67
|
+
|
|
68
|
+
const enhance = (prompt?: string) => {
|
|
69
|
+
if (!formContext?.values) return;
|
|
70
|
+
setLoading(true);
|
|
71
|
+
if (prompt) {
|
|
72
|
+
addRecentPrompt(storageKey, prompt);
|
|
73
|
+
setSamplePrompts([{
|
|
74
|
+
prompt,
|
|
75
|
+
type: "recent"
|
|
76
|
+
}, ...(samplePrompts ?? []).slice(0, 5)]);
|
|
77
|
+
}
|
|
78
|
+
return dataEnhancementController.enhance({
|
|
79
|
+
entityId,
|
|
80
|
+
values: formContext!.values,
|
|
81
|
+
instructions: prompt,
|
|
82
|
+
replaceValues: true
|
|
83
|
+
}).finally(() => {
|
|
84
|
+
setLoading(false);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
if (!dataEnhancementController?.enabled)
|
|
89
|
+
return null;
|
|
90
|
+
|
|
91
|
+
const hasSuggestions = Object.values(suggestions).filter(Boolean).length > 0;
|
|
92
|
+
|
|
93
|
+
const disabledSuggestionActions = !hasSuggestions;
|
|
94
|
+
const promptSuggestionsEnabled = (samplePrompts ?? []).length > 0 && instructions.length === 0;
|
|
95
|
+
|
|
96
|
+
// const noIdSet = !formContext?.entityId;
|
|
97
|
+
|
|
98
|
+
function submit() {
|
|
99
|
+
enhance(instructions);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<Menu
|
|
104
|
+
align={"end"}
|
|
105
|
+
sideOffset={8}
|
|
106
|
+
className={"max-w-[100vw]"}
|
|
107
|
+
trigger={<Button variant={"filled"}
|
|
108
|
+
color={"neutral"}
|
|
109
|
+
fullWidth={largeLayout && openEntityMode === "full_screen"}
|
|
110
|
+
size={"small"}
|
|
111
|
+
disabled={loading}>
|
|
112
|
+
{!loading && <AIIcon size={"small"}/>}
|
|
113
|
+
{loading && <CircularProgress size={"small"}/>}
|
|
114
|
+
Autofill
|
|
115
|
+
</Button>}>
|
|
116
|
+
|
|
117
|
+
<MenuItem className={"py-4"}
|
|
118
|
+
onClick={() => {
|
|
119
|
+
enhance();
|
|
120
|
+
}}>
|
|
121
|
+
<AIIcon size={"small"}/>
|
|
122
|
+
Autofill based on the current content
|
|
123
|
+
</MenuItem>
|
|
124
|
+
|
|
125
|
+
<Separator orientation={"horizontal"} className={"mt-2"}/>
|
|
126
|
+
|
|
127
|
+
{samplePrompts?.map((samplePrompt, index) => {
|
|
128
|
+
return <MenuItem
|
|
129
|
+
key={index + "_" + samplePrompt.prompt}
|
|
130
|
+
onClick={() => {
|
|
131
|
+
setInstructions(samplePrompt.prompt);
|
|
132
|
+
enhance(samplePrompt.prompt);
|
|
133
|
+
}}
|
|
134
|
+
>
|
|
135
|
+
<div className={"pl-9 grow text-text-secondary dark:text-text-secondary-dark"}>
|
|
136
|
+
{samplePrompt.prompt}
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
{samplePrompt.type === "recent" && <IconButton
|
|
140
|
+
onClick={(e) => {
|
|
141
|
+
e.preventDefault();
|
|
142
|
+
e.stopPropagation();
|
|
143
|
+
removeRecentPrompt(storageKey, samplePrompt.prompt);
|
|
144
|
+
setSamplePrompts((samplePrompts ?? []).filter(p => p.prompt !== samplePrompt.prompt));
|
|
145
|
+
}}
|
|
146
|
+
size={"smallest"}
|
|
147
|
+
>
|
|
148
|
+
<XIcon size={iconSize.smallest}/>
|
|
149
|
+
</IconButton>
|
|
150
|
+
}
|
|
151
|
+
</MenuItem>;
|
|
152
|
+
})}
|
|
153
|
+
|
|
154
|
+
<Separator orientation={"horizontal"}/>
|
|
155
|
+
|
|
156
|
+
<div
|
|
157
|
+
className={cls(
|
|
158
|
+
"my-2 w-[500px] max-w-full flex items-start text-surface-700 dark:text-surface-200"
|
|
159
|
+
)}>
|
|
160
|
+
|
|
161
|
+
<TextareaAutosize
|
|
162
|
+
className={cls("p-4 rounded-lg resize-none bg-surface-100 dark:bg-surface-950 mx-2 w-full grow outline-hidden max-h-[300px] overflow-auto", focusedDisabled)}
|
|
163
|
+
value={instructions}
|
|
164
|
+
autoFocus={status === "new"}
|
|
165
|
+
disabled={loading}
|
|
166
|
+
onFocus={(event) => {
|
|
167
|
+
event.stopPropagation();
|
|
168
|
+
}}
|
|
169
|
+
placeholder={"...or provide instructions"}
|
|
170
|
+
onKeyDown={(e) => {
|
|
171
|
+
e.stopPropagation();
|
|
172
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
173
|
+
e.preventDefault();
|
|
174
|
+
submit();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
}}
|
|
178
|
+
onChange={(e) => {
|
|
179
|
+
setInstructions(e.target.value);
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
|
|
183
|
+
<IconButton
|
|
184
|
+
size={"small"}
|
|
185
|
+
onClick={() => {
|
|
186
|
+
setInstructions("");
|
|
187
|
+
}}
|
|
188
|
+
color={!instructions ? "primary" : undefined}
|
|
189
|
+
disabled={loading || !instructions}>
|
|
190
|
+
<XIcon size={iconSize.small}/>
|
|
191
|
+
</IconButton>
|
|
192
|
+
|
|
193
|
+
<IconButton
|
|
194
|
+
onClick={() => enhance(instructions)}
|
|
195
|
+
size={"small"}
|
|
196
|
+
color={!instructions ? "primary" : undefined}
|
|
197
|
+
disabled={loading || !instructions}>
|
|
198
|
+
{loading &&
|
|
199
|
+
<CircularProgress size={"smallest"}/>}
|
|
200
|
+
{!loading &&
|
|
201
|
+
<SendIcon color={"primary"}/>}
|
|
202
|
+
</IconButton>
|
|
203
|
+
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
</Menu>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export interface EnhanceDialogProps {
|
|
211
|
+
open: boolean;
|
|
212
|
+
onClose: () => void;
|
|
213
|
+
selectReferences: () => void;
|
|
214
|
+
loading: boolean;
|
|
215
|
+
enhance: (instructions: string) => void;
|
|
216
|
+
samplePrompts?: string[];
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function getPromptsForExistingEntities(properties: Properties): SamplePrompt[] {
|
|
220
|
+
|
|
221
|
+
const multilineProperties = Object.values(properties).filter((p: Property) => {
|
|
222
|
+
if (isPropertyBuilder(p)) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
return p.type === "string" && (p.ui?.markdown || p.ui?.multiline);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
const multilinePrompt: Property | undefined = multilineProperties.length > 0
|
|
229
|
+
? multilineProperties[Math.floor(Math.random() * multilineProperties.length)] as Property
|
|
230
|
+
: undefined;
|
|
231
|
+
|
|
232
|
+
const prompts = [
|
|
233
|
+
"Fill the missing fields",
|
|
234
|
+
"Translate the missing content"
|
|
235
|
+
];
|
|
236
|
+
if (multilinePrompt) {
|
|
237
|
+
prompts.push(`Add 2 paragraphs to '${multilinePrompt.name}'`);
|
|
238
|
+
}
|
|
239
|
+
return prompts.map(p => ({
|
|
240
|
+
prompt: p,
|
|
241
|
+
type: "sample"
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const createLocalStorageKey = (path: string, status: EntityStatus) => {
|
|
246
|
+
const statusString = status === "new" ? "new" : "existing";
|
|
247
|
+
return `data_enhancement::${statusString}::${stripCollectionPath(path)}`;
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
const getRecentPromptsFromStorage = (storageKey: string): SamplePrompt[] => {
|
|
251
|
+
const item = localStorage.getItem(storageKey);
|
|
252
|
+
return item ? JSON.parse(item).map((e: string) => ({
|
|
253
|
+
prompt: e,
|
|
254
|
+
type: "recent"
|
|
255
|
+
})) : [];
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const addRecentPrompt = (storageKey: string, prompt: string) => {
|
|
259
|
+
if (!prompt || prompt.trim().length === 0) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const recentPrompts = getRecentPromptsFromStorage(storageKey);
|
|
263
|
+
localStorage.setItem(storageKey, JSON.stringify([prompt, ...recentPrompts
|
|
264
|
+
.map(e => e.prompt)
|
|
265
|
+
.filter(e => e !== prompt)
|
|
266
|
+
.slice(0, 5)]));
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
const removeRecentPrompt = (storageKey: string, prompt: string) => {
|
|
270
|
+
localStorage.setItem(storageKey, JSON.stringify(getRecentPromptsFromStorage(storageKey)
|
|
271
|
+
.map(e => e.prompt)
|
|
272
|
+
.filter(e => e !== prompt)));
|
|
273
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { autocompleteStream } from "../api";
|
|
2
|
+
import { EditorAIController } from "@rebasepro/admin";
|
|
3
|
+
|
|
4
|
+
export function useEditorAIController({ getAuthToken }: { getAuthToken?: () => Promise<string> }): EditorAIController {
|
|
5
|
+
const autocomplete = async (textBefore: string, textAfter: string, onUpdate: (delta: string) => void) => {
|
|
6
|
+
if (!getAuthToken) {
|
|
7
|
+
throw new Error("Firebase token is required");
|
|
8
|
+
}
|
|
9
|
+
const firebaseToken = await getAuthToken();
|
|
10
|
+
return autocompleteStream({
|
|
11
|
+
firebaseToken,
|
|
12
|
+
textBefore,
|
|
13
|
+
textAfter,
|
|
14
|
+
onUpdate
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
autocomplete
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// async function * generateLoremIpsum(): AsyncGenerator<string> {
|
|
24
|
+
// const loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n# Heading\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
|
|
25
|
+
//
|
|
26
|
+
// const words = loremIpsum.split(" ");
|
|
27
|
+
//
|
|
28
|
+
// for (const word of words) {
|
|
29
|
+
// yield word;
|
|
30
|
+
// await new Promise(resolve => setTimeout(resolve, 100));
|
|
31
|
+
// }
|
|
32
|
+
// }
|
|
33
|
+
//
|
|
34
|
+
// const generator = generateLoremIpsum();
|
|
35
|
+
// for await (const word of generator) {
|
|
36
|
+
//
|
|
37
|
+
// }
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export {
|
|
2
|
+
useDataEnhancementPlugin
|
|
3
|
+
} from "./useDataEnhancementPlugin";
|
|
4
|
+
export type {
|
|
5
|
+
DataEnhancementPluginProps
|
|
6
|
+
} from "./useDataEnhancementPlugin";
|
|
7
|
+
|
|
8
|
+
export type { SubscriptionMessageProps } from "./types/subscriptions_message_props";
|
|
9
|
+
|
|
10
|
+
export * from "./editor/useEditorAIController";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsDe = {
|
|
2
|
+
autofill: "Automatisch ausfüllen",
|
|
3
|
+
autofill_current_content: "Basierend auf dem aktuellen Inhalt automatisch ausfüllen",
|
|
4
|
+
set_id_first: "Bitte zuerst eine ID festlegen",
|
|
5
|
+
provide_instructions: "Anweisungen für die Datenerweiterung angeben",
|
|
6
|
+
fill_missing_fields: "Fehlende Felder ausfüllen",
|
|
7
|
+
translate_missing_content: "Fehlenden Inhalt übersetzen",
|
|
8
|
+
add_2_paragraphs_to: "2 Absätze zum Inhalt hinzufügen",
|
|
9
|
+
use_openai_generate_content: "Verwenden Sie Google Vertex AI oder OpenAI, um Inhalte automatisch zu generieren.",
|
|
10
|
+
autofill_this_field: "Dieses Feld automatisch ausfüllen",
|
|
11
|
+
autofill_property: "Eigenschaft automatisch ausfüllen",
|
|
12
|
+
input_data_before_enhancing: "Vor der Erweiterung Daten eingeben",
|
|
13
|
+
input_data_before_enhancing_property: "Sie müssen Daten in anderen Eigenschaften eingeben, bevor Sie diese erweitern können.",
|
|
14
|
+
based_on_rest_of_entity: "Basierend auf dem Rest der Entität",
|
|
15
|
+
this_field: "dieses Feld",
|
|
16
|
+
subscription_needed: "Für die Nutzung dieser Funktion ist ein gültiges Abonnement erforderlich.",
|
|
17
|
+
login_to_enhance: "Sie müssen angemeldet sein, um Daten zu erweitern",
|
|
18
|
+
no_fields_updated: "Keine Felder wurden aktualisiert",
|
|
19
|
+
ask_ai_to_write: "KI zum Schreiben auffordern",
|
|
20
|
+
instructions: "Anweisungen"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsEn = {
|
|
2
|
+
autofill: "Autofill",
|
|
3
|
+
autofill_current_content: "Autofill based on current content",
|
|
4
|
+
set_id_first: "You must set an ID first",
|
|
5
|
+
provide_instructions: "Provide instructions to Data Enhancement",
|
|
6
|
+
fill_missing_fields: "Fill missing fields",
|
|
7
|
+
translate_missing_content: "Translate missing content",
|
|
8
|
+
add_2_paragraphs_to: "Add 2 paragraphs to the content",
|
|
9
|
+
use_openai_generate_content: "Use Google Vertex AI or OpenAI to generate content automatically.",
|
|
10
|
+
autofill_this_field: "Autofill this field",
|
|
11
|
+
autofill_property: "Autofill property",
|
|
12
|
+
input_data_before_enhancing: "Input some data before enhancing",
|
|
13
|
+
input_data_before_enhancing_property: "You need to input some data in other properties before enhancing this one.",
|
|
14
|
+
based_on_rest_of_entity: "Based on the rest of the entity",
|
|
15
|
+
this_field: "this field",
|
|
16
|
+
subscription_needed: "A valid subscription is needed in order to use this function.",
|
|
17
|
+
login_to_enhance: "You need to be logged in to enhance data",
|
|
18
|
+
no_fields_updated: "No fields were updated",
|
|
19
|
+
ask_ai_to_write: "Ask AI to write",
|
|
20
|
+
instructions: "Instructions"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsEs = {
|
|
2
|
+
autofill: "Autocompletar",
|
|
3
|
+
autofill_current_content: "Autocompletar basado en el contenido actual",
|
|
4
|
+
set_id_first: "Debes establecer un ID primero",
|
|
5
|
+
provide_instructions: "Proporcionar instrucciones para Mejora de datos",
|
|
6
|
+
fill_missing_fields: "Llenar campos faltantes",
|
|
7
|
+
translate_missing_content: "Traducir contenido faltante",
|
|
8
|
+
add_2_paragraphs_to: "Añadir 2 párrafos al contenido",
|
|
9
|
+
use_openai_generate_content: "Usa Google Vertex AI u OpenAI para generar contenido automáticamente.",
|
|
10
|
+
autofill_this_field: "Autocompletar este campo",
|
|
11
|
+
autofill_property: "Propiedad de autocompletado",
|
|
12
|
+
input_data_before_enhancing: "Introduce algunos datos antes de mejorar el contenido",
|
|
13
|
+
input_data_before_enhancing_property: "Necesitas ingresar datos en otras propiedades antes de mejorar esta.",
|
|
14
|
+
based_on_rest_of_entity: "Basado en el resto de la entidad",
|
|
15
|
+
this_field: "este campo",
|
|
16
|
+
subscription_needed: "Se necesita una suscripción válida para usar esta función.",
|
|
17
|
+
login_to_enhance: "Necesitas iniciar sesión para mejorar datos",
|
|
18
|
+
no_fields_updated: "No se actualizaron campos",
|
|
19
|
+
ask_ai_to_write: "Pídele a la IA que escriba",
|
|
20
|
+
instructions: "Instrucciones"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsFr = {
|
|
2
|
+
autofill: "Remplissage automatique",
|
|
3
|
+
autofill_current_content: "Remplissage automatique basé sur le contenu actuel",
|
|
4
|
+
set_id_first: "Vous devez d'abord définir un identifiant",
|
|
5
|
+
provide_instructions: "Fournir des instructions pour l'amélioration des données",
|
|
6
|
+
fill_missing_fields: "Remplir les champs manquants",
|
|
7
|
+
translate_missing_content: "Traduire le contenu manquant",
|
|
8
|
+
add_2_paragraphs_to: "Ajouter 2 paragraphes au contenu",
|
|
9
|
+
use_openai_generate_content: "Utilisez Google Vertex AI ou OpenAI pour générer du contenu automatiquement.",
|
|
10
|
+
autofill_this_field: "Remplir automatiquement ce champ",
|
|
11
|
+
autofill_property: "Propriété de remplissage automatique",
|
|
12
|
+
input_data_before_enhancing: "Saisir des données avant l'amélioration",
|
|
13
|
+
input_data_before_enhancing_property: "Vous devez saisir des données dans d'autres propriétés avant d'améliorer celle-ci.",
|
|
14
|
+
based_on_rest_of_entity: "Basé sur le reste de l'entité",
|
|
15
|
+
this_field: "ce champ",
|
|
16
|
+
subscription_needed: "Un abonnement valide est nécessaire pour utiliser cette fonctionnalité.",
|
|
17
|
+
login_to_enhance: "Vous devez être connecté pour améliorer les données",
|
|
18
|
+
no_fields_updated: "Aucun champ n'a été mis à jour",
|
|
19
|
+
ask_ai_to_write: "Demander à l'IA d'écrire",
|
|
20
|
+
instructions: "Instructions"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsHi = {
|
|
2
|
+
autofill: "ऑटोफ़िल",
|
|
3
|
+
autofill_current_content: "वर्तमान सामग्री के आधार पर ऑटोफ़िल करें",
|
|
4
|
+
set_id_first: "पहले एक ID सेट करना आवश्यक है",
|
|
5
|
+
provide_instructions: "डेटा एन्हांसमेंट के लिए निर्देश प्रदान करें",
|
|
6
|
+
fill_missing_fields: "अनुपस्थित फ़ील्ड भरें",
|
|
7
|
+
translate_missing_content: "अनुपस्थित सामग्री अनुवाद करें",
|
|
8
|
+
add_2_paragraphs_to: "सामग्री में 2 पैराग्राफ जोड़ें",
|
|
9
|
+
use_openai_generate_content: "सामग्री स्वचालित रूप से जनरेट करने के लिए Google Vertex AI या OpenAI का उपयोग करें।",
|
|
10
|
+
autofill_this_field: "इस फ़ील्ड को ऑटोफ़िल करें",
|
|
11
|
+
autofill_property: "ऑटोफ़िल प्रॉपर्टी",
|
|
12
|
+
input_data_before_enhancing: "एन्हांस करने से पहले कुछ डेटा दर्ज करें",
|
|
13
|
+
input_data_before_enhancing_property: "इस प्रॉपर्टी को एन्हांस करने से पहले आपको अन्य प्रॉपर्टीज़ में डेटा दर्ज करना होगा।",
|
|
14
|
+
based_on_rest_of_entity: "एंटिटी के बाकी भाग के आधार पर",
|
|
15
|
+
this_field: "यह फ़ील्ड",
|
|
16
|
+
subscription_needed: "इस फ़ंक्शन का उपयोग करने के लिए एक वैध सब्सक्रिप्शन आवश्यक है।",
|
|
17
|
+
login_to_enhance: "डेटा एन्हांस करने के लिए लॉग इन करना आवश्यक है",
|
|
18
|
+
no_fields_updated: "कोई फ़ील्ड अपडेट नहीं हुई",
|
|
19
|
+
ask_ai_to_write: "AI से लिखने के लिए कहें",
|
|
20
|
+
instructions: "निर्देश"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsIt = {
|
|
2
|
+
autofill: "Compilazione automatica",
|
|
3
|
+
autofill_current_content: "Compilazione automatica basata sul contenuto attuale",
|
|
4
|
+
set_id_first: "È necessario impostare prima un ID",
|
|
5
|
+
provide_instructions: "Fornisci istruzioni per il miglioramento dei dati",
|
|
6
|
+
fill_missing_fields: "Compila i campi mancanti",
|
|
7
|
+
translate_missing_content: "Traduci il contenuto mancante",
|
|
8
|
+
add_2_paragraphs_to: "Aggiungi 2 paragrafi al contenuto",
|
|
9
|
+
use_openai_generate_content: "Usa Google Vertex AI o OpenAI per generare contenuti automaticamente.",
|
|
10
|
+
autofill_this_field: "Compila automaticamente questo campo",
|
|
11
|
+
autofill_property: "Proprietà di compilazione automatica",
|
|
12
|
+
input_data_before_enhancing: "Inserisci alcuni dati prima di migliorare",
|
|
13
|
+
input_data_before_enhancing_property: "Devi inserire dati in altre proprietà prima di migliorare questa.",
|
|
14
|
+
based_on_rest_of_entity: "Basato sul resto dell'entità",
|
|
15
|
+
this_field: "questo campo",
|
|
16
|
+
subscription_needed: "È necessario un abbonamento valido per utilizzare questa funzione.",
|
|
17
|
+
login_to_enhance: "Devi essere connesso per migliorare i dati",
|
|
18
|
+
no_fields_updated: "Nessun campo è stato aggiornato",
|
|
19
|
+
ask_ai_to_write: "Chiedi all'IA di scrivere",
|
|
20
|
+
instructions: "Istruzioni"
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const dataEnhancementTranslationsPt = {
|
|
2
|
+
autofill: "Preenchimento automático",
|
|
3
|
+
autofill_current_content: "Preencher automaticamente com base no conteúdo atual",
|
|
4
|
+
set_id_first: "Deve definir primeiro um ID",
|
|
5
|
+
provide_instructions: "Forneça instruções ao Data Enhancement",
|
|
6
|
+
fill_missing_fields: "Preencher campos em falta",
|
|
7
|
+
translate_missing_content: "Traduzir conteúdo em falta",
|
|
8
|
+
add_2_paragraphs_to: "Adicionar 2 parágrafos ao conteúdo",
|
|
9
|
+
use_openai_generate_content: "Use o Google Vertex AI ou OpenAI para gerar conteúdo automaticamente.",
|
|
10
|
+
autofill_this_field: "Preencher automaticamente este campo",
|
|
11
|
+
autofill_property: "Preencher propriedade automaticamente",
|
|
12
|
+
input_data_before_enhancing: "Introduza alguns dados antes de melhorar",
|
|
13
|
+
input_data_before_enhancing_property: "Precisa de introduzir alguns dados noutras propriedades antes de melhorar esta.",
|
|
14
|
+
based_on_rest_of_entity: "Com base no resto da entidade",
|
|
15
|
+
this_field: "este campo",
|
|
16
|
+
subscription_needed: "É necessária uma subscrição válida para usar esta função.",
|
|
17
|
+
login_to_enhance: "Precisa de iniciar sessão para melhorar os dados",
|
|
18
|
+
no_fields_updated: "Nenhum campo foi atualizado",
|
|
19
|
+
ask_ai_to_write: "Pedir à IA para escrever",
|
|
20
|
+
instructions: "Instruções"
|
|
21
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Import the diffStrings function from your module
|
|
2
|
+
// import { diffStrings } from './your-module';
|
|
3
|
+
|
|
4
|
+
import { Change, diffStrings } from "../utils/diffStrings";
|
|
5
|
+
|
|
6
|
+
describe("diffStrings", () => {
|
|
7
|
+
test("equal strings", () => {
|
|
8
|
+
const oldStr = "This is a test string";
|
|
9
|
+
const newStr = "This is a test string";
|
|
10
|
+
const expected: Change[] = [
|
|
11
|
+
{
|
|
12
|
+
type: "equal",
|
|
13
|
+
value: "This is a test string"
|
|
14
|
+
}
|
|
15
|
+
];
|
|
16
|
+
expect(diffStrings(oldStr, newStr)).toEqual(expected);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("insertions only", () => {
|
|
20
|
+
const oldStr = "This is a test string";
|
|
21
|
+
const newStr = "This is a new test string";
|
|
22
|
+
const expected: Change[] = [
|
|
23
|
+
{
|
|
24
|
+
type: "equal",
|
|
25
|
+
value: "This is a"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: "insert",
|
|
29
|
+
value: " new"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: "equal",
|
|
33
|
+
value: " test string"
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
expect(diffStrings(oldStr, newStr)).toEqual(expected);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("deletions only", () => {
|
|
40
|
+
const oldStr = "This is an old test string";
|
|
41
|
+
const newStr = "This is a test string";
|
|
42
|
+
const expected: Change[] = [
|
|
43
|
+
{
|
|
44
|
+
type: "equal",
|
|
45
|
+
value: "This is a"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: "delete",
|
|
49
|
+
value: "n old"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: "equal",
|
|
53
|
+
value: " test string"
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
expect(diffStrings(oldStr, newStr)).toEqual(expected);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("insertions and deletions", () => {
|
|
60
|
+
const oldStr = "This is an old test string";
|
|
61
|
+
const newStr = "This is a new modified test string";
|
|
62
|
+
// The LCS algorithm finds the longest common substrings correctly
|
|
63
|
+
// Even though the output is more granular, it correctly represents the diff
|
|
64
|
+
const expected: Change[] = [
|
|
65
|
+
{
|
|
66
|
+
type: "equal",
|
|
67
|
+
value: "This is a"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: "insert",
|
|
71
|
+
value: " "
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
type: "equal",
|
|
75
|
+
value: "n"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
type: "insert",
|
|
79
|
+
value: "ew"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: "equal",
|
|
83
|
+
value: " "
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: "insert",
|
|
87
|
+
value: "m"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
type: "equal",
|
|
91
|
+
value: "o"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: "delete",
|
|
95
|
+
value: "l"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: "insert",
|
|
99
|
+
value: "difie"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: "equal",
|
|
103
|
+
value: "d test string"
|
|
104
|
+
}
|
|
105
|
+
];
|
|
106
|
+
expect(diffStrings(oldStr, newStr)).toEqual(expected);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test("completely different strings", () => {
|
|
110
|
+
const oldStr = "Old string";
|
|
111
|
+
const newStr = "New string";
|
|
112
|
+
const expected: Change[] = [
|
|
113
|
+
{
|
|
114
|
+
type: "delete",
|
|
115
|
+
value: "Old"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: "insert",
|
|
119
|
+
value: "New"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
type: "equal",
|
|
123
|
+
value: " string"
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
expect(diffStrings(oldStr, newStr)).toEqual(expected);
|
|
127
|
+
});
|
|
128
|
+
});
|