R: Refactor users feature boundary
This commit is contained in:
parent
aedaaa27bb
commit
90be3b5aa7
|
@ -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[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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<UserID[]>(initial);
|
||||
const [selected, setSelected] = useState<number[]>(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]);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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<IUserInfo>();
|
||||
|
||||
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;
|
6
rsconcept/frontend/src/features/users/index.ts
Normal file
6
rsconcept/frontend/src/features/users/index.ts
Normal file
|
@ -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';
|
|
@ -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;
|
Loading…
Reference in New Issue
Block a user