From ba11c1f82bba9ade7f0102054362d0e664e66cab Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Wed, 26 Feb 2025 00:16:22 +0300 Subject: [PATCH] R: Refactor feature dependencies --- .../src/app/Navigation/UserDropdown.tsx | 3 +- .../frontend/src/components/DomainIcons.tsx | 125 ------------------ rsconcept/frontend/src/components/Icons.tsx | 4 + .../src/components/Modal/ModalForm.tsx | 5 +- .../src/components/Modal/ModalView.tsx | 4 +- .../src/features/auth/components/index.tsx | 2 + rsconcept/frontend/src/features/auth/index.ts | 5 +- .../features/help/components/InfoCstClass.tsx | 2 +- .../help/components/InfoCstStatus.tsx | 2 +- .../src/features/help/components/index.tsx | 1 + rsconcept/frontend/src/features/help/index.ts | 1 - .../src/features/library/backend/api.ts | 2 +- .../library/backend/useSetAccessPolicy.tsx | 4 +- .../library/backend/useSetEditors.tsx | 4 +- .../library/backend/useSetLocation.tsx | 4 +- .../features/library/backend/useSetOwner.tsx | 4 +- .../library/backend/useUpdateItem.tsx | 4 +- .../library/backend/useVersionDelete.tsx | 2 +- .../library/backend/useVersionUpdate.tsx | 2 +- .../library/components/BadgeLocation.tsx | 5 +- .../library/components/EditorLibraryItem.tsx | 3 +- .../library/components/IconAccessPolicy.tsx | 15 +++ .../library/components/IconItemVisibility.tsx | 10 ++ .../components/IconLibraryItemType.tsx | 13 ++ .../library/components/IconLocationHead.tsx | 17 +++ .../library/components/IconShowSubfolders.tsx | 10 ++ .../library/components/SelectAccessPolicy.tsx | 20 +-- .../library/components/SelectItemType.tsx | 18 +-- .../library/components/SelectLocationHead.tsx | 7 +- .../library/components/ToolbarItemAccess.tsx | 7 +- .../src/features/library/components/index.tsx | 7 + .../library/dialogs/DlgCloneLibraryItem.tsx | 4 +- .../dialogs/DlgEditEditors/DlgEditEditors.tsx | 3 +- .../DlgEditVersions/DlgEditVersions.tsx | 2 +- .../frontend/src/features/library/index.ts | 28 ++-- .../pages/CreateItemPage/CreateItemPage.tsx | 2 +- .../pages/CreateItemPage/FormCreateItem.tsx | 4 +- .../pages/LibraryPage/ToolbarSearch.tsx | 11 +- .../pages/LibraryPage/ViewSideLocation.tsx | 7 +- .../src/features/oss/backend/OssLoader.ts | 2 +- .../oss/backend/useOperationCreate.tsx | 2 +- .../oss/backend/useOperationUpdate.tsx | 2 +- .../oss/backend/useUpdatePositions.tsx | 2 +- .../oss/components/IconRelocationUp.tsx | 10 ++ .../oss/dialogs/DlgChangeInputSchema.tsx | 4 +- .../DlgCreateOperation/TabInputOperation.tsx | 4 +- .../dialogs/DlgEditOperation/TabSynthesis.tsx | 3 +- .../oss/dialogs/DlgRelocateConstituents.tsx | 11 +- rsconcept/frontend/src/features/oss/index.ts | 3 +- .../src/features/oss/models/ossAPI.ts | 14 +- .../OssPage/EditorOssCard/EditorOssCard.tsx | 4 +- .../pages/OssPage/EditorOssCard/FormOSS.tsx | 5 +- .../pages/OssPage/EditorOssGraph/OssFlow.tsx | 2 +- .../EditorOssGraph/ToolbarOssGraph.tsx | 3 +- .../oss/pages/OssPage/MenuOssTabs.tsx | 2 +- .../oss/pages/OssPage/OssEditContext.tsx | 3 +- .../features/rsform/backend/useCstCreate.tsx | 2 +- .../features/rsform/backend/useCstDelete.tsx | 2 +- .../features/rsform/backend/useCstMove.tsx | 2 +- .../features/rsform/backend/useCstRename.tsx | 2 +- .../rsform/backend/useCstSubstitute.tsx | 2 +- .../features/rsform/backend/useCstUpdate.tsx | 2 +- .../rsform/backend/useInlineSynthesis.tsx | 2 +- .../rsform/backend/useProduceStructure.tsx | 2 +- .../rsform/backend/useResetAliases.tsx | 2 +- .../rsform/backend/useRestoreOrder.tsx | 2 +- .../features/rsform/backend/useUploadTRS.tsx | 2 +- .../rsform/components/IconCstMatchMode.tsx | 19 +++ .../rsform/components/IconCstType.tsx | 35 +++++ .../rsform/components/IconDependencyMode.tsx | 26 ++++ .../components/IconExpressionStatus.tsx | 26 ++++ .../rsform/components/PickSubstitutions.tsx | 3 +- .../rsform/components/ToolbarRSFormCard.tsx | 8 +- .../src/features/rsform/components/index.tsx | 3 + .../dialogs/DlgCreateCst/FormCreateCst.tsx | 3 +- .../dialogs/DlgCstTemplate/TabTemplate.tsx | 2 +- .../dialogs/DlgInlineSynthesis/TabSource.tsx | 4 +- .../frontend/src/features/rsform/index.ts | 20 +-- .../frontend/src/features/rsform/labels.ts | 2 +- .../src/features/rsform/models/rsformAPI.ts | 3 +- .../ToolbarConstituenta.tsx | 7 +- .../EditorRSExpression/EditorRSExpression.tsx | 3 +- .../EditorRSExpression/StatusBar.tsx | 4 +- .../EditorRSFormCard/EditorRSFormCard.tsx | 2 +- .../EditorRSFormCard/FormRSForm.tsx | 11 +- .../EditorRSFormCard/ToolbarVersioning.tsx | 5 +- .../RSFormPage/EditorRSList/ToolbarRSList.tsx | 39 +----- .../EditorTermGraph/GraphSelectors.tsx | 3 +- .../EditorTermGraph/SchemasGuide.tsx | 2 +- .../EditorTermGraph/ToolbarFocusedCst.tsx | 3 +- .../EditorTermGraph/ToolbarTermGraph.tsx | 9 +- .../EditorTermGraph/graph/TGLayout.ts | 4 +- .../rsform/pages/RSFormPage/MenuMain.tsx | 3 +- .../rsform/pages/RSFormPage/MenuRSTabs.tsx | 2 +- .../rsform/pages/RSFormPage/RSEditContext.tsx | 3 +- .../ViewConstituents/SelectGraphFilter.tsx | 6 +- .../ViewConstituents/SelectMatchMode.tsx | 6 +- .../src/features/users/components/index.tsx | 3 + .../frontend/src/features/users/index.ts | 3 - .../users/pages/RegisterPage/RegisterPage.tsx | 3 +- .../pages/UserProfilePage/EditorPassword.tsx | 4 +- .../pages/UserProfilePage/UserProfilePage.tsx | 2 +- rsconcept/frontend/src/stores/tooltips.ts | 4 +- 103 files changed, 408 insertions(+), 348 deletions(-) delete mode 100644 rsconcept/frontend/src/components/DomainIcons.tsx create mode 100644 rsconcept/frontend/src/features/auth/components/index.tsx create mode 100644 rsconcept/frontend/src/features/help/components/index.tsx create mode 100644 rsconcept/frontend/src/features/library/components/IconAccessPolicy.tsx create mode 100644 rsconcept/frontend/src/features/library/components/IconItemVisibility.tsx create mode 100644 rsconcept/frontend/src/features/library/components/IconLibraryItemType.tsx create mode 100644 rsconcept/frontend/src/features/library/components/IconLocationHead.tsx create mode 100644 rsconcept/frontend/src/features/library/components/IconShowSubfolders.tsx create mode 100644 rsconcept/frontend/src/features/library/components/index.tsx create mode 100644 rsconcept/frontend/src/features/oss/components/IconRelocationUp.tsx create mode 100644 rsconcept/frontend/src/features/rsform/components/IconCstMatchMode.tsx create mode 100644 rsconcept/frontend/src/features/rsform/components/IconCstType.tsx create mode 100644 rsconcept/frontend/src/features/rsform/components/IconDependencyMode.tsx create mode 100644 rsconcept/frontend/src/features/rsform/components/IconExpressionStatus.tsx create mode 100644 rsconcept/frontend/src/features/rsform/components/index.tsx create mode 100644 rsconcept/frontend/src/features/users/components/index.tsx diff --git a/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx b/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx index e4cce76c..4c369584 100644 --- a/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx +++ b/rsconcept/frontend/src/app/Navigation/UserDropdown.tsx @@ -1,4 +1,5 @@ -import { useAuthSuspense, useLogout } from '@/features/auth'; +import { useAuthSuspense } from '@/features/auth'; +import { useLogout } from '@/features/auth/backend/useLogout'; import { Dropdown, DropdownButton } from '@/components/Dropdown'; import { diff --git a/rsconcept/frontend/src/components/DomainIcons.tsx b/rsconcept/frontend/src/components/DomainIcons.tsx deleted file mode 100644 index e03a37bd..00000000 --- a/rsconcept/frontend/src/components/DomainIcons.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { LocationHead } from '@/features/library/models/library'; -import { ExpressionStatus } from '@/features/rsform/models/rsform'; -import { CstMatchMode, DependencyMode } from '@/features/rsform/stores/cstSearch'; - -import { - IconAlias, - IconBusiness, - IconFilter, - IconFormula, - IconGraphCollapse, - IconGraphExpand, - IconGraphInputs, - IconGraphOutputs, - IconHide, - IconMoveDown, - IconMoveUp, - type IconProps, - IconPublic, - IconSettings, - IconShow, - IconStatusError, - IconStatusIncalculable, - IconStatusOK, - IconStatusUnknown, - IconSubfolders, - IconTemplates, - IconTerm, - IconText, - IconUser -} from './Icons'; - -export interface DomIconProps extends IconProps { - value: RequestData; -} - -/** Icon for visibility. */ -export function VisibilityIcon({ value, size = '1.25rem', className }: DomIconProps) { - if (value) { - return ; - } else { - return ; - } -} - -/** Icon for subfolders. */ -export function SubfoldersIcon({ value, size = '1.25rem', className }: DomIconProps) { - if (value) { - return ; - } else { - return ; - } -} - -/** Icon for location. */ -export function LocationIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value.substring(0, 2) as LocationHead) { - case LocationHead.COMMON: - return ; - case LocationHead.LIBRARY: - return ; - case LocationHead.PROJECTS: - return ; - case LocationHead.USER: - return ; - } -} - -/** Icon for term graph dependency mode. */ -export function DependencyIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case DependencyMode.ALL: - return ; - case DependencyMode.OUTPUTS: - return ; - case DependencyMode.INPUTS: - return ; - case DependencyMode.EXPAND_OUTPUTS: - return ; - case DependencyMode.EXPAND_INPUTS: - return ; - } -} - -/** Icon for constituenta match mode. */ -export function MatchModeIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case CstMatchMode.ALL: - return ; - case CstMatchMode.TEXT: - return ; - case CstMatchMode.EXPR: - return ; - case CstMatchMode.TERM: - return ; - case CstMatchMode.NAME: - return ; - } -} - -/** Icon for expression status. */ -export function StatusIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case ExpressionStatus.VERIFIED: - case ExpressionStatus.PROPERTY: - return ; - - case ExpressionStatus.UNKNOWN: - return ; - case ExpressionStatus.INCALCULABLE: - return ; - - case ExpressionStatus.INCORRECT: - case ExpressionStatus.UNDEFINED: - return ; - } -} - -/** Icon for relocation direction. */ -export function RelocateUpIcon({ value, size = '1.25rem', className }: DomIconProps) { - if (value) { - return ; - } else { - return ; - } -} diff --git a/rsconcept/frontend/src/components/Icons.tsx b/rsconcept/frontend/src/components/Icons.tsx index d6f114ee..7eff031c 100644 --- a/rsconcept/frontend/src/components/Icons.tsx +++ b/rsconcept/frontend/src/components/Icons.tsx @@ -155,6 +155,10 @@ export { LuCircleDashed as IconAnimation } from 'react-icons/lu'; export { LuCircle as IconAnimationOff } from 'react-icons/lu'; // ===== Custom elements ====== +export interface DomIconProps extends IconProps { + value: RequestData; +} + interface IconSVGProps { viewBox: string; size?: string; diff --git a/rsconcept/frontend/src/components/Modal/ModalForm.tsx b/rsconcept/frontend/src/components/Modal/ModalForm.tsx index 6c919ab7..e391f5e3 100644 --- a/rsconcept/frontend/src/components/Modal/ModalForm.tsx +++ b/rsconcept/frontend/src/components/Modal/ModalForm.tsx @@ -2,7 +2,8 @@ import clsx from 'clsx'; -import { BadgeHelp, type HelpTopic } from '@/features/help'; +import { type HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { useEscapeKey } from '@/hooks/useEscapeKey'; import { useDialogsStore } from '@/stores/dialogs'; @@ -130,7 +131,7 @@ export function ModalForm({ {children} -
+
-
+
diff --git a/rsconcept/frontend/src/features/auth/components/index.tsx b/rsconcept/frontend/src/features/auth/components/index.tsx new file mode 100644 index 00000000..44120e22 --- /dev/null +++ b/rsconcept/frontend/src/features/auth/components/index.tsx @@ -0,0 +1,2 @@ +export { ExpectedAnonymous } from './ExpectedAnonymous'; +export { RequireAuth } from './RequireAuth'; diff --git a/rsconcept/frontend/src/features/auth/index.ts b/rsconcept/frontend/src/features/auth/index.ts index 4f96f319..dedd9549 100644 --- a/rsconcept/frontend/src/features/auth/index.ts +++ b/rsconcept/frontend/src/features/auth/index.ts @@ -1,5 +1,2 @@ +export * from './backend/types'; export { useAuthSuspense } from './backend/useAuth'; -export { useChangePassword } from './backend/useChangePassword'; -export { useLogout } from './backend/useLogout'; -export { ExpectedAnonymous } from './components/ExpectedAnonymous'; -export { RequireAuth } from './components/RequireAuth'; diff --git a/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx b/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx index cfe331bc..0e43bf80 100644 --- a/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx +++ b/rsconcept/frontend/src/features/help/components/InfoCstClass.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx'; +import { CstClass } from '@/features/rsform'; import { colorBgCstClass } from '@/features/rsform/colors'; import { describeCstClass, labelCstClass } from '@/features/rsform/labels'; -import { CstClass } from '@/features/rsform/models/rsform'; import { prefixes } from '@/utils/constants'; diff --git a/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx b/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx index 851a5143..5029a860 100644 --- a/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx +++ b/rsconcept/frontend/src/features/help/components/InfoCstStatus.tsx @@ -1,8 +1,8 @@ import clsx from 'clsx'; +import { ExpressionStatus } from '@/features/rsform'; import { colorBgCstStatus } from '@/features/rsform/colors'; import { describeExpressionStatus, labelExpressionStatus } from '@/features/rsform/labels'; -import { ExpressionStatus } from '@/features/rsform/models/rsform'; import { prefixes } from '@/utils/constants'; diff --git a/rsconcept/frontend/src/features/help/components/index.tsx b/rsconcept/frontend/src/features/help/components/index.tsx new file mode 100644 index 00000000..6f35b289 --- /dev/null +++ b/rsconcept/frontend/src/features/help/components/index.tsx @@ -0,0 +1 @@ +export { BadgeHelp } from './BadgeHelp'; diff --git a/rsconcept/frontend/src/features/help/index.ts b/rsconcept/frontend/src/features/help/index.ts index 4ce36b03..860cb18c 100644 --- a/rsconcept/frontend/src/features/help/index.ts +++ b/rsconcept/frontend/src/features/help/index.ts @@ -1,2 +1 @@ -export { BadgeHelp } from './components/BadgeHelp'; export { HelpTopic } from './models/helpTopic'; diff --git a/rsconcept/frontend/src/features/library/backend/api.ts b/rsconcept/frontend/src/features/library/backend/api.ts index fd2e7062..f40dd601 100644 --- a/rsconcept/frontend/src/features/library/backend/api.ts +++ b/rsconcept/frontend/src/features/library/backend/api.ts @@ -5,7 +5,7 @@ import { type IVersionCreatedResponse, schemaRSForm, schemaVersionCreatedResponse -} from '@/features/rsform/backend/types'; +} from '@/features/rsform'; import { axiosDelete, axiosGet, axiosPatch, axiosPost } from '@/backend/apiTransport'; import { DELAYS, KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx b/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx index a7e9b644..8ca10b9c 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetAccessPolicy.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IOperationSchemaDTO } from '@/features/oss/backend/types'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IOperationSchemaDTO } from '@/features/oss'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx index eb051c66..9a97e2c2 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IOperationSchemaDTO } from '@/features/oss/backend/types'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IOperationSchemaDTO } from '@/features/oss'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx b/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx index 465d746e..c979170f 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetLocation.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IOperationSchemaDTO } from '@/features/oss/backend/types'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IOperationSchemaDTO } from '@/features/oss'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx index 379efdf0..826a7788 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IOperationSchemaDTO } from '@/features/oss/backend/types'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IOperationSchemaDTO } from '@/features/oss'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx b/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx index fda06dc7..658147f1 100644 --- a/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx +++ b/rsconcept/frontend/src/features/library/backend/useUpdateItem.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IOperationSchemaDTO } from '@/features/oss/backend/types'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IOperationSchemaDTO } from '@/features/oss'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx b/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx index 76436761..d115f87d 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionDelete.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx b/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx index d303d5e8..a4baae75 100644 --- a/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx +++ b/rsconcept/frontend/src/features/library/backend/useVersionUpdate.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type IRSFormDTO } from '@/features/rsform/backend/types'; +import { type IRSFormDTO } from '@/features/rsform'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/library/components/BadgeLocation.tsx b/rsconcept/frontend/src/features/library/components/BadgeLocation.tsx index e2296910..14a92a8c 100644 --- a/rsconcept/frontend/src/features/library/components/BadgeLocation.tsx +++ b/rsconcept/frontend/src/features/library/components/BadgeLocation.tsx @@ -1,6 +1,7 @@ -import { LocationIcon } from '@/components/DomainIcons'; import { globalIDs } from '@/utils/constants'; +import { IconLocationHead } from './IconLocationHead'; + interface BadgeLocationProps { /** Location to display. */ location: string; @@ -12,7 +13,7 @@ interface BadgeLocationProps { export function BadgeLocation({ location }: BadgeLocationProps) { return (
- +
); } diff --git a/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx b/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx index f2886dac..a5b1172b 100644 --- a/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx +++ b/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx @@ -2,7 +2,8 @@ import { Suspense } from 'react'; import { useIntl } from 'react-intl'; import { urls, useConceptNavigation } from '@/app'; -import { InfoUsers, SelectUser, useLabelUser, useRoleStore, UserRole } from '@/features/users'; +import { useLabelUser, useRoleStore, UserRole } from '@/features/users'; +import { InfoUsers, SelectUser } from '@/features/users/components'; import { Overlay, Tooltip } from '@/components/Container'; import { MiniButton } from '@/components/Control'; diff --git a/rsconcept/frontend/src/features/library/components/IconAccessPolicy.tsx b/rsconcept/frontend/src/features/library/components/IconAccessPolicy.tsx new file mode 100644 index 00000000..8f154d0f --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/IconAccessPolicy.tsx @@ -0,0 +1,15 @@ +import { type DomIconProps, IconPrivate, IconProtected, IconPublic } from '@/components/Icons'; + +import { AccessPolicy } from '../backend/types'; + +/** Icon for access policy. */ +export function IconAccessPolicy({ value, size = '1.25rem', className }: DomIconProps) { + switch (value) { + case AccessPolicy.PRIVATE: + return ; + case AccessPolicy.PROTECTED: + return ; + case AccessPolicy.PUBLIC: + return ; + } +} diff --git a/rsconcept/frontend/src/features/library/components/IconItemVisibility.tsx b/rsconcept/frontend/src/features/library/components/IconItemVisibility.tsx new file mode 100644 index 00000000..dd9642d2 --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/IconItemVisibility.tsx @@ -0,0 +1,10 @@ +import { type DomIconProps, IconHide, IconShow } from '@/components/Icons'; + +/** Icon for visibility. */ +export function IconItemVisibility({ value, size = '1.25rem', className }: DomIconProps) { + if (value) { + return ; + } else { + return ; + } +} diff --git a/rsconcept/frontend/src/features/library/components/IconLibraryItemType.tsx b/rsconcept/frontend/src/features/library/components/IconLibraryItemType.tsx new file mode 100644 index 00000000..52c6116d --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/IconLibraryItemType.tsx @@ -0,0 +1,13 @@ +import { type DomIconProps, IconOSS, IconRSForm } from '@/components/Icons'; + +import { LibraryItemType } from '../backend/types'; + +/** Icon for library item type. */ +export function IconLibraryItemType({ value, size = '1.25rem', className }: DomIconProps) { + switch (value) { + case LibraryItemType.RSFORM: + return ; + case LibraryItemType.OSS: + return ; + } +} diff --git a/rsconcept/frontend/src/features/library/components/IconLocationHead.tsx b/rsconcept/frontend/src/features/library/components/IconLocationHead.tsx new file mode 100644 index 00000000..f0d8140b --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/IconLocationHead.tsx @@ -0,0 +1,17 @@ +import { type DomIconProps, IconBusiness, IconPublic, IconTemplates, IconUser } from '@/components/Icons'; + +import { LocationHead } from '../models/library'; + +/** Icon for location. */ +export function IconLocationHead({ value, size = '1.25rem', className }: DomIconProps) { + switch (value.substring(0, 2) as LocationHead) { + case LocationHead.COMMON: + return ; + case LocationHead.LIBRARY: + return ; + case LocationHead.PROJECTS: + return ; + case LocationHead.USER: + return ; + } +} diff --git a/rsconcept/frontend/src/features/library/components/IconShowSubfolders.tsx b/rsconcept/frontend/src/features/library/components/IconShowSubfolders.tsx new file mode 100644 index 00000000..f4e1eb71 --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/IconShowSubfolders.tsx @@ -0,0 +1,10 @@ +import { type DomIconProps, IconSubfolders } from '@/components/Icons'; + +/** Icon for subfolders. */ +export function IconShowSubfolders({ value, size = '1.25rem', className }: DomIconProps) { + if (value) { + return ; + } else { + return ; + } +} diff --git a/rsconcept/frontend/src/features/library/components/SelectAccessPolicy.tsx b/rsconcept/frontend/src/features/library/components/SelectAccessPolicy.tsx index b6cc7048..70f92fd9 100644 --- a/rsconcept/frontend/src/features/library/components/SelectAccessPolicy.tsx +++ b/rsconcept/frontend/src/features/library/components/SelectAccessPolicy.tsx @@ -1,15 +1,15 @@ 'use client'; import { MiniButton } from '@/components/Control'; -import { type DomIconProps } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; -import { IconPrivate, IconProtected, IconPublic } from '@/components/Icons'; import { type Styling } from '@/components/props'; import { prefixes } from '@/utils/constants'; import { AccessPolicy } from '../backend/types'; import { describeAccessPolicy, labelAccessPolicy } from '../labels'; +import { IconAccessPolicy } from './IconAccessPolicy'; + interface SelectAccessPolicyProps extends Styling { value: AccessPolicy; onChange: (value: AccessPolicy) => void; @@ -34,7 +34,7 @@ export function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ... title={`Доступ: ${labelAccessPolicy(value)}`} hideTitle={menu.isOpen} className='h-full' - icon={} + icon={} onClick={menu.toggle} disabled={disabled} /> @@ -44,7 +44,7 @@ export function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ... key={`${prefixes.policy_list}${index}`} text={labelAccessPolicy(item)} title={describeAccessPolicy(item)} - icon={} + icon={} onClick={() => handleChange(item)} /> ))} @@ -52,15 +52,3 @@ export function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ...
); } - -/** Icon for access policy. */ -function PolicyIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case AccessPolicy.PRIVATE: - return ; - case AccessPolicy.PROTECTED: - return ; - case AccessPolicy.PUBLIC: - return ; - } -} diff --git a/rsconcept/frontend/src/features/library/components/SelectItemType.tsx b/rsconcept/frontend/src/features/library/components/SelectItemType.tsx index daf1f5ea..9e2a315a 100644 --- a/rsconcept/frontend/src/features/library/components/SelectItemType.tsx +++ b/rsconcept/frontend/src/features/library/components/SelectItemType.tsx @@ -1,15 +1,15 @@ 'use client'; import { SelectorButton } from '@/components/Control'; -import { type DomIconProps } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; -import { IconOSS, IconRSForm } from '@/components/Icons'; import { type Styling } from '@/components/props'; import { prefixes } from '@/utils/constants'; import { LibraryItemType } from '../backend/types'; import { describeLibraryItemType, labelLibraryItemType } from '../labels'; +import { IconLibraryItemType } from './IconLibraryItemType'; + interface SelectItemTypeProps extends Styling { value: LibraryItemType; onChange: (value: LibraryItemType) => void; @@ -34,7 +34,7 @@ export function SelectItemType({ value, disabled, stretchLeft, onChange, ...rest title={describeLibraryItemType(value)} hideTitle={menu.isOpen} className='h-full px-2 py-1 rounded-lg' - icon={} + icon={} text={labelLibraryItemType(value)} onClick={menu.toggle} disabled={disabled} @@ -45,7 +45,7 @@ export function SelectItemType({ value, disabled, stretchLeft, onChange, ...rest key={`${prefixes.policy_list}${index}`} text={labelLibraryItemType(item)} title={describeLibraryItemType(item)} - icon={} + icon={} onClick={() => handleChange(item)} /> ))} @@ -53,13 +53,3 @@ export function SelectItemType({ value, disabled, stretchLeft, onChange, ...rest
); } - -/** Icon for library item type. */ -function ItemTypeIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case LibraryItemType.RSFORM: - return ; - case LibraryItemType.OSS: - return ; - } -} diff --git a/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx b/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx index bc5fb4c4..e6f9e530 100644 --- a/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx +++ b/rsconcept/frontend/src/features/library/components/SelectLocationHead.tsx @@ -3,7 +3,6 @@ import clsx from 'clsx'; import { SelectorButton } from '@/components/Control'; -import { LocationIcon } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; import { type Styling } from '@/components/props'; import { prefixes } from '@/utils/constants'; @@ -11,6 +10,8 @@ import { prefixes } from '@/utils/constants'; import { describeLocationHead, labelLocationHead } from '../labels'; import { LocationHead } from '../models/library'; +import { IconLocationHead } from './IconLocationHead'; + interface SelectLocationHeadProps extends Styling { value: LocationHead; onChange: (newValue: LocationHead) => void; @@ -39,7 +40,7 @@ export function SelectLocationHead({ title={describeLocationHead(value)} hideTitle={menu.isOpen} className='h-full' - icon={} + icon={} text={labelLocationHead(value)} onClick={menu.toggle} /> @@ -56,7 +57,7 @@ export function SelectLocationHead({ title={describeLocationHead(head)} >
- + {labelLocationHead(head)}
diff --git a/rsconcept/frontend/src/features/library/components/ToolbarItemAccess.tsx b/rsconcept/frontend/src/features/library/components/ToolbarItemAccess.tsx index 890a748c..f4f85401 100644 --- a/rsconcept/frontend/src/features/library/components/ToolbarItemAccess.tsx +++ b/rsconcept/frontend/src/features/library/components/ToolbarItemAccess.tsx @@ -1,9 +1,9 @@ -import { BadgeHelp, HelpTopic } from '@/features/help'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { useRoleStore, UserRole } from '@/features/users'; import { Overlay } from '@/components/Container'; import { MiniButton } from '@/components/Control'; -import { VisibilityIcon } from '@/components/DomainIcons'; import { IconImmutable, IconMutable } from '@/components/Icons'; import { Label } from '@/components/Input'; import { PARAMETER } from '@/utils/constants'; @@ -12,6 +12,7 @@ import { type AccessPolicy, type ILibraryItem } from '../backend/types'; import { useMutatingLibrary } from '../backend/useMutatingLibrary'; import { useSetAccessPolicy } from '../backend/useSetAccessPolicy'; +import { IconItemVisibility } from './IconItemVisibility'; import { SelectAccessPolicy } from './SelectAccessPolicy'; interface ToolbarItemAccessProps { @@ -52,7 +53,7 @@ export function ToolbarItemAccess({ } + icon={} onClick={toggleVisible} disabled={role === UserRole.READER || isProcessing} /> diff --git a/rsconcept/frontend/src/features/library/components/index.tsx b/rsconcept/frontend/src/features/library/components/index.tsx new file mode 100644 index 00000000..a9517428 --- /dev/null +++ b/rsconcept/frontend/src/features/library/components/index.tsx @@ -0,0 +1,7 @@ +export { EditorLibraryItem } from './EditorLibraryItem'; +export { MenuRole } from './MenuRole'; +export { MiniSelectorOSS } from './MiniSelectorOSS'; +export { PickSchema } from './PickSchema'; +export { SelectLibraryItem } from './SelectLibraryItem'; +export { SelectVersion } from './SelectVersion'; +export { ToolbarItemAccess } from './ToolbarItemAccess'; diff --git a/rsconcept/frontend/src/features/library/dialogs/DlgCloneLibraryItem.tsx b/rsconcept/frontend/src/features/library/dialogs/DlgCloneLibraryItem.tsx index 0ae7a099..c9e023f0 100644 --- a/rsconcept/frontend/src/features/library/dialogs/DlgCloneLibraryItem.tsx +++ b/rsconcept/frontend/src/features/library/dialogs/DlgCloneLibraryItem.tsx @@ -8,13 +8,13 @@ import { urls, useConceptNavigation } from '@/app'; import { useAuthSuspense } from '@/features/auth'; import { MiniButton } from '@/components/Control'; -import { VisibilityIcon } from '@/components/DomainIcons'; import { Checkbox, Label, TextArea, TextInput } from '@/components/Input'; import { ModalForm } from '@/components/Modal'; import { useDialogsStore } from '@/stores/dialogs'; import { AccessPolicy, type ICloneLibraryItemDTO, type ILibraryItem, schemaCloneLibraryItem } from '../backend/types'; import { useCloneItem } from '../backend/useCloneItem'; +import { IconItemVisibility } from '../components/IconItemVisibility'; import { SelectAccessPolicy } from '../components/SelectAccessPolicy'; import { SelectLocationContext } from '../components/SelectLocationContext'; import { SelectLocationHead } from '../components/SelectLocationHead'; @@ -105,7 +105,7 @@ export function DlgCloneLibraryItem() { render={({ field }) => ( } + icon={} onClick={() => field.onChange(!field.value)} /> )} diff --git a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx b/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx index cc4d3329..029bd969 100644 --- a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx +++ b/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx @@ -3,7 +3,8 @@ import { useState } from 'react'; import clsx from 'clsx'; -import { SelectUser, TableUsers, useUsers } from '@/features/users'; +import { useUsers } from '@/features/users'; +import { SelectUser, TableUsers } from '@/features/users/components'; import { MiniButton } from '@/components/Control'; import { IconRemove } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/library/dialogs/DlgEditVersions/DlgEditVersions.tsx b/rsconcept/frontend/src/features/library/dialogs/DlgEditVersions/DlgEditVersions.tsx index a2d602cc..b1dd7ced 100644 --- a/rsconcept/frontend/src/features/library/dialogs/DlgEditVersions/DlgEditVersions.tsx +++ b/rsconcept/frontend/src/features/library/dialogs/DlgEditVersions/DlgEditVersions.tsx @@ -5,7 +5,7 @@ import { useMemo } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useRSFormSuspense } from '@/features/rsform'; +import { useRSFormSuspense } from '@/features/rsform/backend/useRSForm'; import { MiniButton } from '@/components/Control'; import { IconReset, IconSave } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/library/index.ts b/rsconcept/frontend/src/features/library/index.ts index 2fbcde57..21aed7a0 100644 --- a/rsconcept/frontend/src/features/library/index.ts +++ b/rsconcept/frontend/src/features/library/index.ts @@ -1,17 +1,13 @@ -export { AccessPolicy, type ILibraryItem, type IVersionInfo, LibraryItemType } from './backend/types'; -export { useDeleteItem } from './backend/useDeleteItem'; -export { useLibrary, useLibrarySuspense } from './backend/useLibrary'; -export { useMutatingLibrary } from './backend/useMutatingLibrary'; -export { useTemplatesSuspense } from './backend/useTemplates'; -export { useUpdateItem } from './backend/useUpdateItem'; -export { useUpdateTimestamp } from './backend/useUpdateTimestamp'; -export { useVersionRestore } from './backend/useVersionRestore'; -export { EditorLibraryItem } from './components/EditorLibraryItem'; -export { MenuRole } from './components/MenuRole'; -export { MiniSelectorOSS } from './components/MiniSelectorOSS'; -export { PickSchema } from './components/PickSchema'; -export { SelectLibraryItem } from './components/SelectLibraryItem'; -export { SelectVersion } from './components/SelectVersion'; -export { ToolbarItemAccess } from './components/ToolbarItemAccess'; -export { type ILibraryItemReference } from './models/library'; +export { + AccessPolicy, + type ILibraryItem, + type ILibraryItemData, + type IUpdateLibraryItemDTO, + type IVersionInfo, + LibraryItemType, + schemaLibraryItem, + schemaUpdateLibraryItem, + schemaVersionInfo +} from './backend/types'; +export { BASIC_SCHEMAS, type CurrentVersion, type ILibraryItemReference, LocationHead } from './models/library'; export { useLibrarySearchStore } from './stores/librarySearch'; diff --git a/rsconcept/frontend/src/features/library/pages/CreateItemPage/CreateItemPage.tsx b/rsconcept/frontend/src/features/library/pages/CreateItemPage/CreateItemPage.tsx index 0a8316b0..5420ae11 100644 --- a/rsconcept/frontend/src/features/library/pages/CreateItemPage/CreateItemPage.tsx +++ b/rsconcept/frontend/src/features/library/pages/CreateItemPage/CreateItemPage.tsx @@ -1,4 +1,4 @@ -import { RequireAuth } from '@/features/auth'; +import { RequireAuth } from '@/features/auth/components'; import { FormCreateItem } from './FormCreateItem'; diff --git a/rsconcept/frontend/src/features/library/pages/CreateItemPage/FormCreateItem.tsx b/rsconcept/frontend/src/features/library/pages/CreateItemPage/FormCreateItem.tsx index 7ed330e2..73906484 100644 --- a/rsconcept/frontend/src/features/library/pages/CreateItemPage/FormCreateItem.tsx +++ b/rsconcept/frontend/src/features/library/pages/CreateItemPage/FormCreateItem.tsx @@ -10,7 +10,6 @@ import { useAuthSuspense } from '@/features/auth'; import { Overlay } from '@/components/Container'; import { Button, MiniButton, SubmitButton } from '@/components/Control'; -import { VisibilityIcon } from '@/components/DomainIcons'; import { IconDownload } from '@/components/Icons'; import { InfoError } from '@/components/InfoError'; import { Label, TextArea, TextInput } from '@/components/Input'; @@ -23,6 +22,7 @@ import { schemaCreateLibraryItem } from '../../backend/types'; import { useCreateItem } from '../../backend/useCreateItem'; +import { IconItemVisibility } from '../../components/IconItemVisibility'; import { SelectAccessPolicy } from '../../components/SelectAccessPolicy'; import { SelectItemType } from '../../components/SelectItemType'; import { SelectLocationContext } from '../../components/SelectLocationContext'; @@ -188,7 +188,7 @@ export function FormCreateItem() { render={({ field }) => ( } + icon={} onClick={() => field.onChange(!field.value)} /> )} diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx index 19e24997..7fd10a3a 100644 --- a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx +++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx @@ -2,10 +2,9 @@ import clsx from 'clsx'; -import { SelectUser } from '@/features/users'; +import { SelectUser } from '@/features/users/components'; import { MiniButton, SelectorButton } from '@/components/Control'; -import { LocationIcon, VisibilityIcon } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; import { IconEditor, @@ -20,6 +19,8 @@ import { SearchBar } from '@/components/Input'; import { prefixes } from '@/utils/constants'; import { tripleToggleColor } from '@/utils/utils'; +import { IconItemVisibility } from '../../components/IconItemVisibility'; +import { IconLocationHead } from '../../components/IconLocationHead'; import { describeLocationHead, labelLocationHead } from '../../labels'; import { LocationHead } from '../../models/library'; import { useHasCustomFilter, useLibrarySearchStore } from '../../stores/librarySearch'; @@ -98,7 +99,7 @@ export function ToolbarSearch({ total, filtered }: ToolbarSearchProps) {
} + icon={} onClick={toggleVisible} /> @@ -156,7 +157,7 @@ export function ToolbarSearch({ total, filtered }: ToolbarSearchProps) { hideTitle={headMenu.isOpen} icon={ head ? ( - + ) : ( ) @@ -187,7 +188,7 @@ export function ToolbarSearch({ total, filtered }: ToolbarSearchProps) { title={describeLocationHead(head)} >
- + {labelLocationHead(head)}
diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx index 8b3efe34..6bde8a33 100644 --- a/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx +++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/ViewSideLocation.tsx @@ -2,10 +2,10 @@ import { toast } from 'react-toastify'; import clsx from 'clsx'; import { useAuthSuspense } from '@/features/auth'; -import { BadgeHelp, HelpTopic } from '@/features/help'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { MiniButton } from '@/components/Control'; -import { SubfoldersIcon } from '@/components/DomainIcons'; import { IconFolderEdit, IconFolderTree } from '@/components/Icons'; import { useWindowSize } from '@/hooks/useWindowSize'; import { useFitHeight } from '@/stores/appLayout'; @@ -13,6 +13,7 @@ import { PARAMETER, prefixes } from '@/utils/constants'; import { infoMsg } from '@/utils/labels'; import { useLibrary } from '../../backend/useLibrary'; +import { IconShowSubfolders } from '../../components/IconShowSubfolders'; import { SelectLocation } from '../../components/SelectLocation'; import { type FolderNode } from '../../models/FolderTree'; import { useLibrarySearchStore } from '../../stores/librarySearch'; @@ -90,7 +91,7 @@ export function ViewSideLocation({ isVisible, onRenameLocation }: ViewSideLocati {!!location ? ( } + icon={} onClick={toggleSubfolders} /> ) : null} diff --git a/rsconcept/frontend/src/features/oss/backend/OssLoader.ts b/rsconcept/frontend/src/features/oss/backend/OssLoader.ts index 8a1d6bb0..d9d6447a 100644 --- a/rsconcept/frontend/src/features/oss/backend/OssLoader.ts +++ b/rsconcept/frontend/src/features/oss/backend/OssLoader.ts @@ -2,7 +2,7 @@ * Module: OSS data loading and processing. */ -import { type ILibraryItem } from '@/features/library/backend/types'; +import { type ILibraryItem } from '@/features/library'; import { Graph } from '@/models/Graph'; diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx index ed2903b3..494d71a2 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationCreate.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useUpdateTimestamp } from '@/features/library'; +import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx b/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx index 65c99d91..d8640fdd 100644 --- a/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useOperationUpdate.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { type ILibraryItem } from '@/features/library/backend/types'; +import { type ILibraryItem } from '@/features/library'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx b/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx index 78b27e84..9dccb862 100644 --- a/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx +++ b/rsconcept/frontend/src/features/oss/backend/useUpdatePositions.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { useUpdateTimestamp } from '@/features/library'; +import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp'; import { KEYS } from '@/backend/configuration'; diff --git a/rsconcept/frontend/src/features/oss/components/IconRelocationUp.tsx b/rsconcept/frontend/src/features/oss/components/IconRelocationUp.tsx new file mode 100644 index 00000000..a7c73b15 --- /dev/null +++ b/rsconcept/frontend/src/features/oss/components/IconRelocationUp.tsx @@ -0,0 +1,10 @@ +import { type DomIconProps, IconMoveDown, IconMoveUp } from '@/components/Icons'; + +/** Icon for relocation direction. */ +export function IconRelocationUp({ value, size = '1.25rem', className }: DomIconProps) { + if (value) { + return ; + } else { + return ; + } +} diff --git a/rsconcept/frontend/src/features/oss/dialogs/DlgChangeInputSchema.tsx b/rsconcept/frontend/src/features/oss/dialogs/DlgChangeInputSchema.tsx index 77c4dd0f..21eafc14 100644 --- a/rsconcept/frontend/src/features/oss/dialogs/DlgChangeInputSchema.tsx +++ b/rsconcept/frontend/src/features/oss/dialogs/DlgChangeInputSchema.tsx @@ -4,7 +4,9 @@ import { Controller, useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; -import { type ILibraryItem, LibraryItemType, PickSchema, useLibrary } from '@/features/library'; +import { type ILibraryItem, LibraryItemType } from '@/features/library'; +import { useLibrary } from '@/features/library/backend/useLibrary'; +import { PickSchema } from '@/features/library/components'; import { MiniButton } from '@/components/Control'; import { IconReset } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/TabInputOperation.tsx b/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/TabInputOperation.tsx index 31860344..41f1d45e 100644 --- a/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/TabInputOperation.tsx +++ b/rsconcept/frontend/src/features/oss/dialogs/DlgCreateOperation/TabInputOperation.tsx @@ -2,7 +2,9 @@ import { Controller, useFormContext, useWatch } from 'react-hook-form'; -import { type ILibraryItem, LibraryItemType, PickSchema, useLibrary } from '@/features/library'; +import { type ILibraryItem, LibraryItemType } from '@/features/library'; +import { useLibrary } from '@/features/library/backend/useLibrary'; +import { PickSchema } from '@/features/library/components'; import { MiniButton } from '@/components/Control'; import { IconReset } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/oss/dialogs/DlgEditOperation/TabSynthesis.tsx b/rsconcept/frontend/src/features/oss/dialogs/DlgEditOperation/TabSynthesis.tsx index 860796a8..2589652f 100644 --- a/rsconcept/frontend/src/features/oss/dialogs/DlgEditOperation/TabSynthesis.tsx +++ b/rsconcept/frontend/src/features/oss/dialogs/DlgEditOperation/TabSynthesis.tsx @@ -2,7 +2,8 @@ import { Controller, useFormContext, useWatch } from 'react-hook-form'; -import { PickSubstitutions, useRSForms } from '@/features/rsform'; +import { useRSForms } from '@/features/rsform/backend/useRSForms'; +import { PickSubstitutions } from '@/features/rsform/components'; import { TextArea } from '@/components/Input'; import { useDialogsStore } from '@/stores/dialogs'; diff --git a/rsconcept/frontend/src/features/oss/dialogs/DlgRelocateConstituents.tsx b/rsconcept/frontend/src/features/oss/dialogs/DlgRelocateConstituents.tsx index af8d2bb7..716a4adb 100644 --- a/rsconcept/frontend/src/features/oss/dialogs/DlgRelocateConstituents.tsx +++ b/rsconcept/frontend/src/features/oss/dialogs/DlgRelocateConstituents.tsx @@ -6,11 +6,13 @@ import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; import { HelpTopic } from '@/features/help'; -import { type ILibraryItem, SelectLibraryItem, useLibrary } from '@/features/library'; -import { PickMultiConstituenta, useRSForm } from '@/features/rsform'; +import { type ILibraryItem } from '@/features/library'; +import { useLibrary } from '@/features/library/backend/useLibrary'; +import { SelectLibraryItem } from '@/features/library/components'; +import { useRSForm } from '@/features/rsform/backend/useRSForm'; +import { PickMultiConstituenta } from '@/features/rsform/components'; import { MiniButton } from '@/components/Control'; -import { RelocateUpIcon } from '@/components/DomainIcons'; import { Loader } from '@/components/Loader'; import { ModalForm } from '@/components/Modal'; import { useDialogsStore } from '@/stores/dialogs'; @@ -18,6 +20,7 @@ import { useDialogsStore } from '@/stores/dialogs'; import { type ICstRelocateDTO, type IOperationPosition, schemaCstRelocate } from '../backend/types'; import { useRelocateConstituents } from '../backend/useRelocateConstituents'; import { useUpdatePositions } from '../backend/useUpdatePositions'; +import { IconRelocationUp } from '../components/IconRelocationUp'; import { type IOperation, type IOperationSchema } from '../models/oss'; import { getRelocateCandidates } from '../models/ossAPI'; @@ -132,7 +135,7 @@ export function DlgRelocateConstituents() { /> } + icon={} onClick={toggleDirection} /> ) { + switch (value) { + case CstMatchMode.ALL: + return ; + case CstMatchMode.TEXT: + return ; + case CstMatchMode.EXPR: + return ; + case CstMatchMode.TERM: + return ; + case CstMatchMode.NAME: + return ; + } +} diff --git a/rsconcept/frontend/src/features/rsform/components/IconCstType.tsx b/rsconcept/frontend/src/features/rsform/components/IconCstType.tsx new file mode 100644 index 00000000..1cc24cf4 --- /dev/null +++ b/rsconcept/frontend/src/features/rsform/components/IconCstType.tsx @@ -0,0 +1,35 @@ +import { type DomIconProps } from '@/components/Icons'; +import { + IconCstAxiom, + IconCstBaseSet, + IconCstConstSet, + IconCstFunction, + IconCstPredicate, + IconCstStructured, + IconCstTerm, + IconCstTheorem +} from '@/components/Icons'; + +import { CstType } from '../backend/types'; + +/** Icon for constituenta type. */ +export function IconCstType({ value, size = '1.25rem', className }: DomIconProps) { + switch (value) { + case CstType.BASE: + return ; + case CstType.CONSTANT: + return ; + case CstType.STRUCTURED: + return ; + case CstType.TERM: + return ; + case CstType.AXIOM: + return ; + case CstType.FUNCTION: + return ; + case CstType.PREDICATE: + return ; + case CstType.THEOREM: + return ; + } +} diff --git a/rsconcept/frontend/src/features/rsform/components/IconDependencyMode.tsx b/rsconcept/frontend/src/features/rsform/components/IconDependencyMode.tsx new file mode 100644 index 00000000..dfc7d1db --- /dev/null +++ b/rsconcept/frontend/src/features/rsform/components/IconDependencyMode.tsx @@ -0,0 +1,26 @@ +import { + type DomIconProps, + IconGraphCollapse, + IconGraphExpand, + IconGraphInputs, + IconGraphOutputs, + IconSettings +} from '@/components/Icons'; + +import { DependencyMode } from '../stores/cstSearch'; + +/** Icon for term graph dependency mode. */ +export function IconDependencyMode({ value, size = '1.25rem', className }: DomIconProps) { + switch (value) { + case DependencyMode.ALL: + return ; + case DependencyMode.OUTPUTS: + return ; + case DependencyMode.INPUTS: + return ; + case DependencyMode.EXPAND_OUTPUTS: + return ; + case DependencyMode.EXPAND_INPUTS: + return ; + } +} diff --git a/rsconcept/frontend/src/features/rsform/components/IconExpressionStatus.tsx b/rsconcept/frontend/src/features/rsform/components/IconExpressionStatus.tsx new file mode 100644 index 00000000..89df1e74 --- /dev/null +++ b/rsconcept/frontend/src/features/rsform/components/IconExpressionStatus.tsx @@ -0,0 +1,26 @@ +import { + type DomIconProps, + IconStatusError, + IconStatusIncalculable, + IconStatusOK, + IconStatusUnknown +} from '@/components/Icons'; + +import { ExpressionStatus } from '../models/rsform'; + +export function IconExpressionStatus({ value, size = '1.25rem', className }: DomIconProps) { + switch (value) { + case ExpressionStatus.VERIFIED: + case ExpressionStatus.PROPERTY: + return ; + + case ExpressionStatus.UNKNOWN: + return ; + case ExpressionStatus.INCALCULABLE: + return ; + + case ExpressionStatus.INCORRECT: + case ExpressionStatus.UNDEFINED: + return ; + } +} diff --git a/rsconcept/frontend/src/features/rsform/components/PickSubstitutions.tsx b/rsconcept/frontend/src/features/rsform/components/PickSubstitutions.tsx index 08c3e7ce..e9af6dfb 100644 --- a/rsconcept/frontend/src/features/rsform/components/PickSubstitutions.tsx +++ b/rsconcept/frontend/src/features/rsform/components/PickSubstitutions.tsx @@ -4,7 +4,8 @@ import { useState } from 'react'; import { toast } from 'react-toastify'; import clsx from 'clsx'; -import { type ILibraryItem, SelectLibraryItem } from '@/features/library'; +import { type ILibraryItem } from '@/features/library'; +import { SelectLibraryItem } from '@/features/library/components'; import { MiniButton } from '@/components/Control'; import { createColumnHelper, DataTable, type IConditionalStyle } from '@/components/DataTable'; diff --git a/rsconcept/frontend/src/features/rsform/components/ToolbarRSFormCard.tsx b/rsconcept/frontend/src/features/rsform/components/ToolbarRSFormCard.tsx index fa9c79e0..38227942 100644 --- a/rsconcept/frontend/src/features/rsform/components/ToolbarRSFormCard.tsx +++ b/rsconcept/frontend/src/features/rsform/components/ToolbarRSFormCard.tsx @@ -1,9 +1,11 @@ 'use client'; import { urls, useConceptNavigation } from '@/app'; -import { BadgeHelp, HelpTopic } from '@/features/help'; -import { AccessPolicy, LibraryItemType, MiniSelectorOSS, useMutatingLibrary } from '@/features/library'; -import { type ILibraryItem } from '@/features/library/backend/types'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; +import { AccessPolicy, type ILibraryItem, LibraryItemType } from '@/features/library'; +import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary'; +import { MiniSelectorOSS } from '@/features/library/components'; import { useRoleStore, UserRole } from '@/features/users'; import { Overlay } from '@/components/Container'; diff --git a/rsconcept/frontend/src/features/rsform/components/index.tsx b/rsconcept/frontend/src/features/rsform/components/index.tsx new file mode 100644 index 00000000..a719d782 --- /dev/null +++ b/rsconcept/frontend/src/features/rsform/components/index.tsx @@ -0,0 +1,3 @@ +export { PickMultiConstituenta } from './PickMultiConstituenta'; +export { PickSubstitutions } from './PickSubstitutions'; +export { ToolbarRSFormCard } from './ToolbarRSFormCard'; diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx index b2423b91..e8dc2150 100644 --- a/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx +++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgCreateCst/FormCreateCst.tsx @@ -4,7 +4,8 @@ import { useState } from 'react'; import { Controller, useFormContext, useWatch } from 'react-hook-form'; import clsx from 'clsx'; -import { BadgeHelp, HelpTopic } from '@/features/help'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { TextArea, TextInput } from '@/components/Input'; import { PARAMETER } from '@/utils/constants'; diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgCstTemplate/TabTemplate.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgCstTemplate/TabTemplate.tsx index 06d207cc..60407fc3 100644 --- a/rsconcept/frontend/src/features/rsform/dialogs/DlgCstTemplate/TabTemplate.tsx +++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgCstTemplate/TabTemplate.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useTemplatesSuspense } from '@/features/library'; +import { useTemplatesSuspense } from '@/features/library/backend/useTemplates'; import { SelectSingle, TextArea } from '@/components/Input'; diff --git a/rsconcept/frontend/src/features/rsform/dialogs/DlgInlineSynthesis/TabSource.tsx b/rsconcept/frontend/src/features/rsform/dialogs/DlgInlineSynthesis/TabSource.tsx index 5da218cd..4199bea4 100644 --- a/rsconcept/frontend/src/features/rsform/dialogs/DlgInlineSynthesis/TabSource.tsx +++ b/rsconcept/frontend/src/features/rsform/dialogs/DlgInlineSynthesis/TabSource.tsx @@ -2,7 +2,9 @@ import { useFormContext, useWatch } from 'react-hook-form'; -import { LibraryItemType, PickSchema, useLibrary } from '@/features/library'; +import { LibraryItemType } from '@/features/library'; +import { useLibrary } from '@/features/library/backend/useLibrary'; +import { PickSchema } from '@/features/library/components'; import { TextInput } from '@/components/Input'; import { useDialogsStore } from '@/stores/dialogs'; diff --git a/rsconcept/frontend/src/features/rsform/index.ts b/rsconcept/frontend/src/features/rsform/index.ts index d72991c2..14c93f8e 100644 --- a/rsconcept/frontend/src/features/rsform/index.ts +++ b/rsconcept/frontend/src/features/rsform/index.ts @@ -1,8 +1,12 @@ -export { type ICstSubstitute } from './backend/types'; -export { CstType } from './backend/types'; -export { useRSForm, useRSFormSuspense } from './backend/useRSForm'; -export { useRSForms } from './backend/useRSForms'; -export { PickMultiConstituenta } from './components/PickMultiConstituenta'; -export { PickSubstitutions } from './components/PickSubstitutions'; -export { ToolbarRSFormCard } from './components/ToolbarRSFormCard'; -export { CstClass, type IConstituenta, type IRSForm } from './models/rsform'; +export { + CstType, + type ICstSubstitute, + type IRSFormDTO, + type IVersionCreatedResponse, + ParsingStatus, + schemaCstSubstitute, + schemaRSForm, + schemaVersionCreatedResponse +} from './backend/types'; +export { CstClass, ExpressionStatus, type IConstituenta, type IRSForm } from './models/rsform'; +export { type AliasMapping } from './models/rslang'; diff --git a/rsconcept/frontend/src/features/rsform/labels.ts b/rsconcept/frontend/src/features/rsform/labels.ts index 516572ca..87d77f28 100644 --- a/rsconcept/frontend/src/features/rsform/labels.ts +++ b/rsconcept/frontend/src/features/rsform/labels.ts @@ -5,7 +5,7 @@ import { PARAMETER } from '@/utils/constants'; import { prepareTooltip } from '@/utils/utils'; -import { type IVersionInfo } from '../library'; +import { type IVersionInfo } from '../library/backend/types'; import { type CurrentVersion } from '../library/models/library'; import { CstType, type IRSErrorDescription, ParsingStatus, RSErrorType, TokenID } from './backend/types'; diff --git a/rsconcept/frontend/src/features/rsform/models/rsformAPI.ts b/rsconcept/frontend/src/features/rsform/models/rsformAPI.ts index 8909bdea..2601185a 100644 --- a/rsconcept/frontend/src/features/rsform/models/rsformAPI.ts +++ b/rsconcept/frontend/src/features/rsform/models/rsformAPI.ts @@ -2,8 +2,7 @@ * Module: API for formal representation for systems of concepts. */ -import { type ILibraryItem } from '@/features/library/backend/types'; -import { BASIC_SCHEMAS } from '@/features/library/models/library'; +import { BASIC_SCHEMAS, type ILibraryItem } from '@/features/library'; import { TextMatcher } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx index 8537c2c8..5c2c0de0 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorConstituenta/ToolbarConstituenta.tsx @@ -3,9 +3,10 @@ import clsx from 'clsx'; import { urls, useConceptNavigation } from '@/app'; -import { BadgeHelp, HelpTopic } from '@/features/help'; -import { MiniSelectorOSS } from '@/features/library'; -import { useFindPredecessor } from '@/features/oss'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; +import { MiniSelectorOSS } from '@/features/library/components'; +import { useFindPredecessor } from '@/features/oss/backend/useFindPredecessor'; import { Overlay } from '@/components/Container'; import { MiniButton } from '@/components/Control'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx index f77a1a1d..00a4e244 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/EditorRSExpression.tsx @@ -4,7 +4,8 @@ import { useEffect, useRef, useState } from 'react'; import { toast } from 'react-toastify'; import { type ReactCodeMirrorRef } from '@uiw/react-codemirror'; -import { BadgeHelp, HelpTopic } from '@/features/help'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { Overlay } from '@/components/Container'; import { useDialogsStore } from '@/stores/dialogs'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx index 4e579a5d..2a9ea9c3 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSExpression/StatusBar.tsx @@ -2,7 +2,6 @@ import clsx from 'clsx'; -import { StatusIcon } from '@/components/DomainIcons'; import { Loader } from '@/components/Loader'; import { APP_COLORS } from '@/styling/colors'; import { globalIDs } from '@/utils/constants'; @@ -10,6 +9,7 @@ import { prepareTooltip } from '@/utils/utils'; import { type IExpressionParseDTO, ParsingStatus } from '../../../backend/types'; import { colorStatusBar } from '../../../colors'; +import { IconExpressionStatus } from '../../../components/IconExpressionStatus'; import { labelExpressionStatus } from '../../../labels'; import { ExpressionStatus, type IConstituenta } from '../../../models/rsform'; import { inferStatus } from '../../../models/rsformAPI'; @@ -59,7 +59,7 @@ export function StatusBar({ isModified, processing, activeCst, parseData, onAnal ) : null} {!processing ? (
- + {labelExpressionStatus(status)}
) : null} diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx index 74501234..5cd7baa9 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/EditorRSFormCard.tsx @@ -2,7 +2,7 @@ import clsx from 'clsx'; -import { EditorLibraryItem } from '@/features/library'; +import { EditorLibraryItem } from '@/features/library/components'; import { FlexColumn } from '@/components/Container'; import { useModificationStore } from '@/stores/modification'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx index 04e4c6b0..ef03b836 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/FormRSForm.tsx @@ -7,9 +7,14 @@ import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; import { urls, useConceptNavigation } from '@/app'; -import { LibraryItemType, SelectVersion, ToolbarItemAccess, useUpdateItem } from '@/features/library'; -import { type IUpdateLibraryItemDTO, schemaUpdateLibraryItem } from '@/features/library/backend/types'; -import { type CurrentVersion } from '@/features/library/models/library'; +import { + type CurrentVersion, + type IUpdateLibraryItemDTO, + LibraryItemType, + schemaUpdateLibraryItem +} from '@/features/library'; +import { useUpdateItem } from '@/features/library/backend/useUpdateItem'; +import { SelectVersion, ToolbarItemAccess } from '@/features/library/components'; import { SubmitButton } from '@/components/Control'; import { IconSave } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx index e40595da..cdb3654e 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarVersioning.tsx @@ -1,7 +1,8 @@ 'use client'; -import { BadgeHelp, HelpTopic } from '@/features/help'; -import { useVersionRestore } from '@/features/library'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; +import { useVersionRestore } from '@/features/library/backend/useVersionRestore'; import { Overlay } from '@/components/Container'; import { MiniButton } from '@/components/Control'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx index 7a229771..e3fc0210 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSList/ToolbarRSList.tsx @@ -1,21 +1,13 @@ -import { BadgeHelp, HelpTopic } from '@/features/help'; -import { MiniSelectorOSS } from '@/features/library'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; +import { MiniSelectorOSS } from '@/features/library/components'; import { CstType } from '@/features/rsform'; import { Overlay } from '@/components/Container'; import { MiniButton } from '@/components/Control'; -import { type DomIconProps } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; import { IconClone, - IconCstAxiom, - IconCstBaseSet, - IconCstConstSet, - IconCstFunction, - IconCstPredicate, - IconCstStructured, - IconCstTerm, - IconCstTheorem, IconDestroy, IconMoveDown, IconMoveUp, @@ -27,6 +19,7 @@ import { prefixes } from '@/utils/constants'; import { prepareTooltip } from '@/utils/utils'; import { useMutatingRSForm } from '../../../backend/useMutatingRSForm'; +import { IconCstType } from '../../../components/IconCstType'; import { getCstTypeShortcut, labelCstType } from '../../../labels'; import { useRSEdit } from '../RSEditContext'; @@ -89,7 +82,7 @@ export function ToolbarRSList() { } + icon={} onClick={() => createCst(typeStr as CstType, true)} titleHtml={getCstTypeShortcut(typeStr as CstType)} /> @@ -118,25 +111,3 @@ export function ToolbarRSList() { ); } - -/** Icon for constituenta type. */ -function CstTypeIcon({ value, size = '1.25rem', className }: DomIconProps) { - switch (value) { - case CstType.BASE: - return ; - case CstType.CONSTANT: - return ; - case CstType.STRUCTURED: - return ; - case CstType.TERM: - return ; - case CstType.AXIOM: - return ; - case CstType.FUNCTION: - return ; - case CstType.PREDICATE: - return ; - case CstType.THEOREM: - return ; - } -} diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx index 588579c7..282a4332 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/GraphSelectors.tsx @@ -1,4 +1,5 @@ -import { BadgeHelp, HelpTopic } from '@/features/help'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; import { Overlay } from '@/components/Container'; import { SelectSingle } from '@/components/Input'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx index 40dd95c0..6a01f75f 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/SchemasGuide.tsx @@ -1,4 +1,4 @@ -import { useLibrary } from '@/features/library'; +import { useLibrary } from '@/features/library/backend/useLibrary'; import { Tooltip } from '@/components/Container'; import { IconHelp } from '@/components/Icons'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx index 6e0c4da7..06bb2a1c 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarFocusedCst.tsx @@ -1,11 +1,10 @@ 'use client'; -import { useTermGraphStore } from '@/features/rsform/stores/termGraph'; - import { MiniButton } from '@/components/Control'; import { IconGraphInputs, IconGraphOutputs, IconReset } from '@/components/Icons'; import { APP_COLORS } from '@/styling/colors'; +import { useTermGraphStore } from '../../../stores/termGraph'; import { useRSEdit } from '../RSEditContext'; export function ToolbarFocusedCst() { diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx index de48e444..a69e259a 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/ToolbarTermGraph.tsx @@ -1,10 +1,9 @@ import { useReactFlow } from 'reactflow'; import clsx from 'clsx'; -import { BadgeHelp, HelpTopic } from '@/features/help'; -import { MiniSelectorOSS } from '@/features/library'; -import { CstType } from '@/features/rsform/backend/types'; -import { useTermGraphStore } from '@/features/rsform/stores/termGraph'; +import { HelpTopic } from '@/features/help'; +import { BadgeHelp } from '@/features/help/components'; +import { MiniSelectorOSS } from '@/features/library/components'; import { MiniButton } from '@/components/Control'; import { @@ -21,7 +20,9 @@ import { import { useDialogsStore } from '@/stores/dialogs'; import { PARAMETER } from '@/utils/constants'; +import { CstType } from '../../../backend/types'; import { useMutatingRSForm } from '../../../backend/useMutatingRSForm'; +import { useTermGraphStore } from '../../../stores/termGraph'; import { useRSEdit } from '../RSEditContext'; import { VIEW_PADDING } from './TGFlow'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/graph/TGLayout.ts b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/graph/TGLayout.ts index 1aa2f39c..4699f583 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/graph/TGLayout.ts +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorTermGraph/graph/TGLayout.ts @@ -1,10 +1,10 @@ import { type Edge, type Node } from 'reactflow'; import dagre from '@dagrejs/dagre'; -import { type IConstituenta } from '@/features/rsform/models/rsform'; - import { PARAMETER } from '@/utils/constants'; +import { type IConstituenta } from '../../../../models/rsform'; + export function applyLayout(nodes: Node[], edges: Edge[], subLabels: boolean) { const dagreGraph = new dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})); dagreGraph.setGraph({ diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuMain.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuMain.tsx index bfe88869..67262a6d 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuMain.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuMain.tsx @@ -2,8 +2,7 @@ import fileDownload from 'js-file-download'; import { urls, useConceptNavigation } from '@/app'; import { useAuthSuspense } from '@/features/auth'; -import { AccessPolicy } from '@/features/library'; -import { LocationHead } from '@/features/library/models/library'; +import { AccessPolicy, LocationHead } from '@/features/library'; import { useRoleStore, UserRole } from '@/features/users'; import { Divider } from '@/components/Container'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx index b740b37f..d1691a65 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx @@ -1,7 +1,7 @@ 'use client'; import { useAuthSuspense } from '@/features/auth'; -import { MenuRole } from '@/features/library'; +import { MenuRole } from '@/features/library/components'; import { MenuEditSchema } from './MenuEditSchema'; import { MenuMain } from './MenuMain'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx index aac219da..443caad5 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx @@ -4,7 +4,8 @@ import { createContext, useContext, useEffect, useState } from 'react'; import { urls, useConceptNavigation } from '@/app'; import { useAuthSuspense } from '@/features/auth'; -import { useDeleteItem, useLibrarySearchStore } from '@/features/library'; +import { useLibrarySearchStore } from '@/features/library'; +import { useDeleteItem } from '@/features/library/backend/useDeleteItem'; import { useRoleStore, UserRole } from '@/features/users'; import { useDialogsStore } from '@/stores/dialogs'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx index 24adf41c..73d0b980 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectGraphFilter.tsx @@ -1,12 +1,12 @@ 'use client'; import { SelectorButton } from '@/components/Control'; -import { DependencyIcon } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; import { type Styling } from '@/components/props'; import { useWindowSize } from '@/hooks/useWindowSize'; import { prefixes } from '@/utils/constants'; +import { IconDependencyMode } from '../../../components/IconDependencyMode'; import { describeCstSource, labelCstSource } from '../../../labels'; import { DependencyMode } from '../../../stores/cstSearch'; @@ -33,7 +33,7 @@ export function SelectGraphFilter({ value, dense, onChange, ...restProps }: Sele titleHtml='Настройка фильтрации
по графу термов' hideTitle={menu.isOpen} className='h-full pr-2' - icon={} + icon={} text={!dense && !size.isSmall ? labelCstSource(value) : undefined} onClick={menu.toggle} /> @@ -49,7 +49,7 @@ export function SelectGraphFilter({ value, dense, onChange, ...restProps }: Sele onClick={() => handleChange(source)} >
- {} + {} {!dense ? ( {labelCstSource(source)}: {describeCstSource(source)} diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx index cf58e340..8f29a3c7 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/SelectMatchMode.tsx @@ -1,12 +1,12 @@ 'use client'; import { SelectorButton } from '@/components/Control'; -import { MatchModeIcon } from '@/components/DomainIcons'; import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown'; import { type Styling } from '@/components/props'; import { useWindowSize } from '@/hooks/useWindowSize'; import { prefixes } from '@/utils/constants'; +import { IconCstMatchMode } from '../../../components/IconCstMatchMode'; import { describeCstMatchMode, labelCstMatchMode } from '../../../labels'; import { CstMatchMode } from '../../../stores/cstSearch'; @@ -32,7 +32,7 @@ export function SelectMatchMode({ value, dense, onChange, ...restProps }: Select titleHtml='Настройка фильтрации
по проверяемым атрибутам' hideTitle={menu.isOpen} className='h-full pr-2' - icon={} + icon={} text={dense || size.isSmall ? undefined : labelCstMatchMode(value)} onClick={menu.toggle} /> @@ -48,7 +48,7 @@ export function SelectMatchMode({ value, dense, onChange, ...restProps }: Select onClick={() => handleChange(matchMode)} >
- {} + {} {!dense ? ( {labelCstMatchMode(matchMode)}: {describeCstMatchMode(matchMode)} diff --git a/rsconcept/frontend/src/features/users/components/index.tsx b/rsconcept/frontend/src/features/users/components/index.tsx new file mode 100644 index 00000000..4b773726 --- /dev/null +++ b/rsconcept/frontend/src/features/users/components/index.tsx @@ -0,0 +1,3 @@ +export { InfoUsers } from './InfoUsers'; +export { SelectUser } from './SelectUser'; +export { TableUsers } from './TableUsers'; diff --git a/rsconcept/frontend/src/features/users/index.ts b/rsconcept/frontend/src/features/users/index.ts index adeefd76..6c407750 100644 --- a/rsconcept/frontend/src/features/users/index.ts +++ b/rsconcept/frontend/src/features/users/index.ts @@ -1,6 +1,3 @@ export { useLabelUser } from './backend/useLabelUser'; export { useUsers } from './backend/useUsers'; -export { InfoUsers } from './components/InfoUsers'; -export { SelectUser } from './components/SelectUser'; -export { TableUsers } from './components/TableUsers'; export { useRoleStore, UserRole } from './stores/role'; diff --git a/rsconcept/frontend/src/features/users/pages/RegisterPage/RegisterPage.tsx b/rsconcept/frontend/src/features/users/pages/RegisterPage/RegisterPage.tsx index feb72cb6..6d32231c 100644 --- a/rsconcept/frontend/src/features/users/pages/RegisterPage/RegisterPage.tsx +++ b/rsconcept/frontend/src/features/users/pages/RegisterPage/RegisterPage.tsx @@ -1,4 +1,5 @@ -import { ExpectedAnonymous, useAuthSuspense } from '@/features/auth'; +import { useAuthSuspense } from '@/features/auth'; +import { ExpectedAnonymous } from '@/features/auth/components'; import { FormSignup } from './FormSignup'; diff --git a/rsconcept/frontend/src/features/users/pages/UserProfilePage/EditorPassword.tsx b/rsconcept/frontend/src/features/users/pages/UserProfilePage/EditorPassword.tsx index c650761e..9fddd78e 100644 --- a/rsconcept/frontend/src/features/users/pages/UserProfilePage/EditorPassword.tsx +++ b/rsconcept/frontend/src/features/users/pages/UserProfilePage/EditorPassword.tsx @@ -5,8 +5,8 @@ import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; import { urls, useConceptNavigation } from '@/app'; -import { useChangePassword } from '@/features/auth'; -import { type IChangePasswordDTO, schemaChangePassword } from '@/features/auth/backend/types'; +import { type IChangePasswordDTO, schemaChangePassword } from '@/features/auth'; +import { useChangePassword } from '@/features/auth/backend/useChangePassword'; import { isAxiosError } from '@/backend/apiTransport'; import { FlexColumn } from '@/components/Container'; diff --git a/rsconcept/frontend/src/features/users/pages/UserProfilePage/UserProfilePage.tsx b/rsconcept/frontend/src/features/users/pages/UserProfilePage/UserProfilePage.tsx index d94b4126..994ada22 100644 --- a/rsconcept/frontend/src/features/users/pages/UserProfilePage/UserProfilePage.tsx +++ b/rsconcept/frontend/src/features/users/pages/UserProfilePage/UserProfilePage.tsx @@ -1,4 +1,4 @@ -import { RequireAuth } from '@/features/auth'; +import { RequireAuth } from '@/features/auth/components'; import { EditorPassword } from './EditorPassword'; import { EditorProfile } from './EditorProfile'; diff --git a/rsconcept/frontend/src/stores/tooltips.ts b/rsconcept/frontend/src/stores/tooltips.ts index 38971aa0..67a69723 100644 --- a/rsconcept/frontend/src/stores/tooltips.ts +++ b/rsconcept/frontend/src/stores/tooltips.ts @@ -1,7 +1,7 @@ import { create } from 'zustand'; -import { type IOperation } from '@/features/oss/models/oss'; -import { type IConstituenta } from '@/features/rsform/models/rsform'; +import { type IOperation } from '@/features/oss'; +import { type IConstituenta } from '@/features/rsform'; interface TooltipsStore { activeCst: IConstituenta | null;