diff --git a/rsconcept/frontend/src/features/auth/backend/api.ts b/rsconcept/frontend/src/features/auth/backend/api.ts index 319f474d..4fca65cc 100644 --- a/rsconcept/frontend/src/features/auth/backend/api.ts +++ b/rsconcept/frontend/src/features/auth/backend/api.ts @@ -3,18 +3,16 @@ import { z } from 'zod'; import { axiosGet, axiosPatch, axiosPost } from '@/backend/apiTransport'; import { DELAYS } from '@/backend/configuration'; -import { LibraryItemID } from '@/features/library/models/library'; -import { UserID } from '@/features/users/models/user'; import { errorMsg, infoMsg } from '@/utils/labels'; /** * Represents CurrentUser information. */ export interface ICurrentUser { - id: UserID | null; + id: number | null; username: string; is_staff: boolean; - editor: LibraryItemID[]; + editor: number[]; } /** diff --git a/rsconcept/frontend/src/features/library/backend/api.ts b/rsconcept/frontend/src/features/library/backend/api.ts index 9dbf9508..c7136f41 100644 --- a/rsconcept/frontend/src/features/library/backend/api.ts +++ b/rsconcept/frontend/src/features/library/backend/api.ts @@ -5,7 +5,6 @@ import { axiosDelete, axiosGet, axiosPatch, axiosPost } from '@/backend/apiTrans import { DELAYS } from '@/backend/configuration'; import { ossApi } from '@/features/oss/backend/api'; import { IRSFormDTO, rsformsApi } from '@/features/rsform/backend/api'; -import { UserID } from '@/features/users/models/user'; import { errorMsg, infoMsg } from '@/utils/labels'; import { AccessPolicy, ILibraryItem, IVersionInfo, LibraryItemID, LibraryItemType, VersionID } from '../models/library'; @@ -179,7 +178,7 @@ export const libraryApi = { successMessage: infoMsg.changesSaved } }), - setOwner: ({ itemID, owner }: { itemID: LibraryItemID; owner: UserID }) => + setOwner: ({ itemID, owner }: { itemID: LibraryItemID; owner: number }) => axiosPatch({ endpoint: `/api/library/${itemID}/set-owner`, request: { @@ -203,7 +202,7 @@ export const libraryApi = { successMessage: infoMsg.changesSaved } }), - setEditors: ({ itemID, editors }: { itemID: LibraryItemID; editors: UserID[] }) => + setEditors: ({ itemID, editors }: { itemID: LibraryItemID; editors: number[] }) => axiosPatch({ endpoint: `/api/library/${itemID}/set-editors`, request: { diff --git a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx index 9918c98d..3addb83f 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetEditors.tsx @@ -2,9 +2,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { ossApi } from '@/features/oss/backend/api'; import { rsformsApi } from '@/features/rsform/backend/api'; -import { UserID } from '@/features/users/models/user'; -import { LibraryItemID } from '../models/library'; import { libraryApi } from './api'; export const useSetEditors = () => { @@ -36,6 +34,6 @@ export const useSetEditors = () => { }); return { - setEditors: (data: { itemID: LibraryItemID; editors: UserID[] }) => mutation.mutateAsync(data) + setEditors: (data: { itemID: number; editors: number[] }) => mutation.mutateAsync(data) }; }; diff --git a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx index b8dc69f5..4eda022b 100644 --- a/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx +++ b/rsconcept/frontend/src/features/library/backend/useSetOwner.tsx @@ -2,9 +2,8 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { IOperationSchemaDTO, ossApi } from '@/features/oss/backend/api'; import { rsformsApi } from '@/features/rsform/backend/api'; -import { UserID } from '@/features/users/models/user'; -import { ILibraryItem, LibraryItemID } from '../models/library'; +import { ILibraryItem } from '../models/library'; import { libraryApi } from './api'; export const useSetOwner = () => { @@ -40,6 +39,6 @@ export const useSetOwner = () => { }); return { - setOwner: (data: { itemID: LibraryItemID; owner: UserID }) => mutation.mutateAsync(data) + setOwner: (data: { itemID: number; owner: number }) => mutation.mutateAsync(data) }; }; diff --git a/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx b/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx index e6a92eac..62502895 100644 --- a/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx +++ b/rsconcept/frontend/src/features/library/components/EditorLibraryItem.tsx @@ -16,13 +16,10 @@ import { import { Loader } from '@/components/Loader'; import { CProps } from '@/components/props'; import { ValueIcon } from '@/components/View'; -import { useLabelUser } from '@/features/users/backend/useLabelUser'; -import { InfoUsers } from '@/features/users/components/InfoUsers'; -import { SelectUser } from '@/features/users/components/SelectUser'; -import { UserID, UserRole } from '@/features/users/models/user'; +import { InfoUsers, SelectUser, useLabelUser, useRoleStore } from '@/features/users'; +import { UserRole } from '@/features/users/models/user'; import { useDialogsStore } from '@/stores/dialogs'; import { useModificationStore } from '@/stores/modification'; -import { useRoleStore } from '@/stores/role'; import { prefixes } from '@/utils/constants'; import { promptText } from '@/utils/labels'; @@ -53,7 +50,7 @@ export function EditorLibraryItem({ controller }: EditorLibraryItemProps) { const showEditLocation = useDialogsStore(state => state.showChangeLocation); const ownerSelector = useDropdown(); - const onSelectUser = function (newValue: UserID) { + const onSelectUser = function (newValue: number) { ownerSelector.hide(); if (newValue === controller.schema.owner) { return; @@ -79,7 +76,7 @@ export function EditorLibraryItem({ controller }: EditorLibraryItemProps) { function handleEditEditors() { showEditEditors({ itemID: controller.schema.id, - initial: controller.schema.editors + initialEditors: controller.schema.editors }); } diff --git a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx b/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx index f7807d69..e5fdef12 100644 --- a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx +++ b/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/DlgEditEditors.tsx @@ -7,36 +7,32 @@ import { MiniButton } from '@/components/Control'; import { IconRemove } from '@/components/Icons'; import { Label } from '@/components/Input'; import { ModalForm } from '@/components/Modal'; -import { useUsers } from '@/features/users/backend/useUsers'; -import { SelectUser } from '@/features/users/components/SelectUser'; -import { UserID } from '@/features/users/models/user'; +import { SelectUser, TableUsers, useUsers } from '@/features/users'; import { useDialogsStore } from '@/stores/dialogs'; import { useSetEditors } from '../../backend/useSetEditors'; -import { LibraryItemID } from '../../models/library'; -import TableUsers from './TableUsers'; export interface DlgEditEditorsProps { - itemID: LibraryItemID; - initial: UserID[]; + itemID: number; + initialEditors: number[]; } function DlgEditEditors() { - const { initial, itemID } = useDialogsStore(state => state.props as DlgEditEditorsProps); + const { initialEditors: initial, itemID } = useDialogsStore(state => state.props as DlgEditEditorsProps); const { setEditors } = useSetEditors(); - const [selected, setSelected] = useState(initial); + const [selected, setSelected] = useState(initial); const { users } = useUsers(); function handleSubmit() { void setEditors({ itemID: itemID, editors: selected }); } - function onDeleteEditor(target: UserID) { + function onDeleteEditor(target: number) { setSelected(prev => prev.filter(id => id !== target)); } - function onAddEditor(target: UserID) { + function onAddEditor(target: number) { setSelected(prev => [...prev, target]); } diff --git a/rsconcept/frontend/src/features/library/models/library.ts b/rsconcept/frontend/src/features/library/models/library.ts index d579ebb8..f2d91a9d 100644 --- a/rsconcept/frontend/src/features/library/models/library.ts +++ b/rsconcept/frontend/src/features/library/models/library.ts @@ -2,8 +2,6 @@ * Module: Models for LibraryItem. */ -import { UserID } from '@/features/users/models/user'; - /** * Represents type of library items. */ @@ -69,14 +67,14 @@ export interface ILibraryItem { access_policy: AccessPolicy; time_create: string; time_update: string; - owner: UserID | null; + owner: number | null; } /** * Represents {@link ILibraryItem} constant data loaded for both OSS and RSForm. */ export interface ILibraryItemData extends ILibraryItem { - editors: UserID[]; + editors: number[]; } /** @@ -119,5 +117,5 @@ export interface ILibraryFilter { isVisible?: boolean; isOwned?: boolean; isEditor?: boolean; - filterUser?: UserID; + filterUser?: number; } diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/TableLibraryItems.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/TableLibraryItems.tsx index 07d694f6..2577d496 100644 --- a/rsconcept/frontend/src/features/library/pages/LibraryPage/TableLibraryItems.tsx +++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/TableLibraryItems.tsx @@ -10,7 +10,7 @@ import { MiniButton, TextURL } from '@/components/Control'; import DataTable, { createColumnHelper, IConditionalStyle, VisibilityState } from '@/components/DataTable'; import { IconFolderTree } from '@/components/Icons'; import { CProps } from '@/components/props'; -import { useLabelUser } from '@/features/users/backend/useLabelUser'; +import { useLabelUser } from '@/features/users'; import useWindowSize from '@/hooks/useWindowSize'; import { useFitHeight } from '@/stores/appLayout'; import { usePreferencesStore } from '@/stores/preferences'; diff --git a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx index 0ece9fbd..b4db6226 100644 --- a/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx +++ b/rsconcept/frontend/src/features/library/pages/LibraryPage/ToolbarSearch.tsx @@ -16,7 +16,7 @@ import { } from '@/components/Icons'; import { CProps } from '@/components/props'; import { SearchBar } from '@/components/shared/SearchBar'; -import { SelectUser } from '@/features/users/components/SelectUser'; +import { SelectUser } from '@/features/users'; import { prefixes } from '@/utils/constants'; import { tripleToggleColor } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/library/stores/librarySearch.ts b/rsconcept/frontend/src/features/library/stores/librarySearch.ts index 753c188b..81f4d111 100644 --- a/rsconcept/frontend/src/features/library/stores/librarySearch.ts +++ b/rsconcept/frontend/src/features/library/stores/librarySearch.ts @@ -1,7 +1,6 @@ import { create } from 'zustand'; import { persist } from 'zustand/middleware'; -import { UserID } from '@/features/users/models/user'; import { toggleTristateFlag } from '@/utils/utils'; import { ILibraryFilter, LocationHead } from '../models/library'; @@ -34,8 +33,8 @@ interface LibrarySearchStore { isEditor: boolean | undefined; toggleEditor: () => void; - filterUser: UserID | undefined; - setFilterUser: (value: UserID | undefined) => void; + filterUser: number | undefined; + setFilterUser: (value: number | undefined) => void; resetFilter: () => void; } diff --git a/rsconcept/frontend/src/features/oss/pages/OssPage/MenuOssTabs.tsx b/rsconcept/frontend/src/features/oss/pages/OssPage/MenuOssTabs.tsx index c9239250..868cb180 100644 --- a/rsconcept/frontend/src/features/oss/pages/OssPage/MenuOssTabs.tsx +++ b/rsconcept/frontend/src/features/oss/pages/OssPage/MenuOssTabs.tsx @@ -20,8 +20,8 @@ import { } from '@/components/Icons'; import { useAuthSuspense } from '@/features/auth/backend/useAuth'; import { useMutatingOss } from '@/features/oss/backend/useMutatingOss'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; -import { useRoleStore } from '@/stores/role'; import { describeAccessMode as describeUserRole, labelAccessMode as labelUserRole } from '@/utils/labels'; import { sharePage } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx b/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx index f6af9b61..30dfe347 100644 --- a/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx +++ b/rsconcept/frontend/src/features/oss/pages/OssPage/OssEditContext.tsx @@ -8,10 +8,10 @@ import { useDeleteItem } from '@/features/library/backend/useDeleteItem'; import { ILibraryItemEditor, LibraryItemID } from '@/features/library/models/library'; import { useLibrarySearchStore } from '@/features/library/stores/librarySearch'; import { RSTabID } from '@/features/rsform/pages/RSFormPage/RSEditContext'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; import { useDialogsStore } from '@/stores/dialogs'; import { usePreferencesStore } from '@/stores/preferences'; -import { useRoleStore } from '@/stores/role'; import { promptText } from '@/utils/labels'; import { IOperationPosition } from '../../backend/api'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx index 75408010..78d66c01 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess.tsx @@ -9,8 +9,8 @@ import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrar import { useSetAccessPolicy } from '@/features/library/backend/useSetAccessPolicy'; import SelectAccessPolicy from '@/features/library/components/SelectAccessPolicy'; import { AccessPolicy, ILibraryItemEditor } from '@/features/library/models/library'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; -import { useRoleStore } from '@/stores/role'; import { PARAMETER } from '@/utils/constants'; interface ToolbarItemAccessProps { diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx index fe2774ac..01d12bc2 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard.tsx @@ -7,9 +7,9 @@ import { BadgeHelp } from '@/components/shared/BadgeHelp'; import { HelpTopic } from '@/features/help/models/helpTopic'; import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary'; import { AccessPolicy, ILibraryItemEditor, LibraryItemType } from '@/features/library/models/library'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; import { useModificationStore } from '@/stores/modification'; -import { useRoleStore } from '@/stores/role'; import { PARAMETER } from '@/utils/constants'; import { tooltipText } from '@/utils/labels'; import { prepareTooltip } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx index f2e4e217..d35dcf3f 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/MenuRSTabs.tsx @@ -34,10 +34,10 @@ import { import { useAuthSuspense } from '@/features/auth/backend/useAuth'; import { AccessPolicy, LocationHead } from '@/features/library/models/library'; import { OssTabID } from '@/features/oss/pages/OssPage/OssEditContext'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; import { useDialogsStore } from '@/stores/dialogs'; import { useModificationStore } from '@/stores/modification'; -import { useRoleStore } from '@/stores/role'; import { EXTEOR_TRS_FILE } from '@/utils/constants'; import { describeAccessMode, labelAccessMode, tooltipText } from '@/utils/labels'; import { generatePageQR, promptUnsaved, sharePage } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx index ccdf7ba1..7b0f472e 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/RSEditContext.tsx @@ -8,11 +8,11 @@ import { useDeleteItem } from '@/features/library/backend/useDeleteItem'; import { ILibraryItemEditor, LibraryItemID, VersionID } from '@/features/library/models/library'; import { useLibrarySearchStore } from '@/features/library/stores/librarySearch'; import { OssTabID } from '@/features/oss/pages/OssPage/OssEditContext'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; import { useDialogsStore } from '@/stores/dialogs'; import { useModificationStore } from '@/stores/modification'; import { usePreferencesStore } from '@/stores/preferences'; -import { useRoleStore } from '@/stores/role'; import { PARAMETER, prefixes } from '@/utils/constants'; import { promptText } from '@/utils/labels'; import { promptUnsaved } from '@/utils/utils'; diff --git a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/ViewConstituents.tsx b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/ViewConstituents.tsx index 0946f3a4..0e7b1adb 100644 --- a/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/ViewConstituents.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/RSFormPage/ViewConstituents/ViewConstituents.tsx @@ -3,10 +3,10 @@ import clsx from 'clsx'; import { useState } from 'react'; +import { useRoleStore } from '@/features/users'; import { UserRole } from '@/features/users/models/user'; import useWindowSize from '@/hooks/useWindowSize'; import { useFitHeight } from '@/stores/appLayout'; -import { useRoleStore } from '@/stores/role'; import { PARAMETER } from '@/utils/constants'; import { IConstituenta } from '../../../models/rsform'; diff --git a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/TableUsers.tsx b/rsconcept/frontend/src/features/users/components/TableUsers.tsx similarity index 85% rename from rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/TableUsers.tsx rename to rsconcept/frontend/src/features/users/components/TableUsers.tsx index 0c043ee8..6f613251 100644 --- a/rsconcept/frontend/src/features/library/dialogs/DlgEditEditors/TableUsers.tsx +++ b/rsconcept/frontend/src/features/users/components/TableUsers.tsx @@ -3,16 +3,17 @@ import { MiniButton } from '@/components/Control'; import DataTable, { createColumnHelper } from '@/components/DataTable'; import { IconRemove } from '@/components/Icons'; -import { IUserInfo, UserID } from '@/features/users/models/user'; + +import { IUserInfo } from '../models/user'; interface TableUsersProps { items: IUserInfo[]; - onDelete: (target: UserID) => void; + onDelete: (target: number) => void; } const columnHelper = createColumnHelper(); -function TableUsers({ items, onDelete }: TableUsersProps) { +export function TableUsers({ items, onDelete }: TableUsersProps) { const columns = [ columnHelper.accessor('last_name', { id: 'last_name', @@ -53,5 +54,3 @@ function TableUsers({ items, onDelete }: TableUsersProps) { /> ); } - -export default TableUsers; diff --git a/rsconcept/frontend/src/features/users/index.ts b/rsconcept/frontend/src/features/users/index.ts new file mode 100644 index 00000000..1ba45770 --- /dev/null +++ b/rsconcept/frontend/src/features/users/index.ts @@ -0,0 +1,6 @@ +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 } from './stores/role'; diff --git a/rsconcept/frontend/src/stores/role.ts b/rsconcept/frontend/src/features/users/stores/role.ts similarity index 94% rename from rsconcept/frontend/src/stores/role.ts rename to rsconcept/frontend/src/features/users/stores/role.ts index e022891b..d7797c93 100644 --- a/rsconcept/frontend/src/stores/role.ts +++ b/rsconcept/frontend/src/features/users/stores/role.ts @@ -1,6 +1,6 @@ import { create } from 'zustand'; -import { UserRole } from '@/features/users/models/user'; +import { UserRole } from '../models/user'; export interface RoleFlags { isOwner: boolean;