Refactoring: UI elements naming convention

This commit is contained in:
IRBorisov 2024-06-26 19:47:31 +03:00
parent 3a29a96776
commit 3ea22f3080
93 changed files with 235 additions and 336 deletions

View File

@ -3,8 +3,8 @@ import { Outlet } from 'react-router-dom';
import ConceptToaster from '@/app/ConceptToaster'; import ConceptToaster from '@/app/ConceptToaster';
import Footer from '@/app/Footer'; import Footer from '@/app/Footer';
import Navigation from '@/app/Navigation'; import Navigation from '@/app/Navigation';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { NavigationState } from '@/context/NavigationContext'; import { NavigationState } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { globals } from '@/utils/constants'; import { globals } from '@/utils/constants';
function ApplicationLayout() { function ApplicationLayout() {

View File

@ -1,6 +1,6 @@
import { ToastContainer, type ToastContainerProps } from 'react-toastify'; import { ToastContainer, type ToastContainerProps } from 'react-toastify';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
interface ToasterThemedProps extends Omit<ToastContainerProps, 'theme'> {} interface ToasterThemedProps extends Omit<ToastContainerProps, 'theme'> {}

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { external_urls } from '@/utils/constants'; import { external_urls } from '@/utils/constants';
import TextURL from '../components/ui/TextURL'; import TextURL from '../components/ui/TextURL';

View File

@ -5,8 +5,8 @@ import { IntlProvider } from 'react-intl';
import { pdfjs } from 'react-pdf'; import { pdfjs } from 'react-pdf';
import { AuthState } from '@/context/AuthContext'; import { AuthState } from '@/context/AuthContext';
import { OptionsState } from '@/context/ConceptOptionsContext';
import { LibraryState } from '@/context/LibraryContext'; import { LibraryState } from '@/context/LibraryContext';
import { OptionsState } from '@/context/OptionsContext';
import { UsersState } from '@/context/UsersContext'; import { UsersState } from '@/context/UsersContext';
import ErrorFallback from './ErrorFallback'; import ErrorFallback from './ErrorFallback';

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
function Logo() { function Logo() {

View File

@ -3,14 +3,14 @@ import { motion } from 'framer-motion';
import { IconLibrary2, IconManuals, IconNewItem2 } from '@/components/Icons'; import { IconLibrary2, IconManuals, IconNewItem2 } from '@/components/Icons';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { animateNavigation } from '@/styling/animations'; import { animateNavigation } from '@/styling/animations';
import { urls } from '../urls'; import { urls } from '../urls';
import Logo from './Logo'; import Logo from './Logo';
import NavigationButton from './NavigationButton'; import NavigationButton from './NavigationButton';
import ToggleNavigationButton from './ToggleNavigationButton'; import ToggleNavigation from './ToggleNavigation';
import UserMenu from './UserMenu'; import UserMenu from './UserMenu';
function Navigation() { function Navigation() {
@ -33,7 +33,7 @@ function Navigation() {
'select-none' 'select-none'
)} )}
> >
<ToggleNavigationButton /> <ToggleNavigation />
<motion.div <motion.div
className={clsx( className={clsx(
'pl-2 pr-[0.9rem] h-[3rem] w-full', // prettier: split lines 'pl-2 pr-[0.9rem] h-[3rem] w-full', // prettier: split lines

View File

@ -2,11 +2,11 @@ import clsx from 'clsx';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { IconPin, IconUnpin } from '@/components/Icons'; import { IconPin, IconUnpin } from '@/components/Icons';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { animateNavigationToggle } from '@/styling/animations'; import { animateNavigationToggle } from '@/styling/animations';
import { globals } from '@/utils/constants'; import { globals } from '@/utils/constants';
function ToggleNavigationButton() { function ToggleNavigation() {
const { noNavigationAnimation, toggleNoNavigation } = useConceptOptions(); const { noNavigationAnimation, toggleNoNavigation } = useConceptOptions();
return ( return (
<motion.button <motion.button
@ -31,4 +31,4 @@ function ToggleNavigationButton() {
); );
} }
export default ToggleNavigationButton; export default ToggleNavigation;

View File

@ -13,8 +13,8 @@ import { CProps } from '@/components/props';
import Dropdown from '@/components/ui/Dropdown'; import Dropdown from '@/components/ui/Dropdown';
import DropdownButton from '@/components/ui/DropdownButton'; import DropdownButton from '@/components/ui/DropdownButton';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { urls } from '../urls'; import { urls } from '../urls';

View File

@ -4,8 +4,8 @@ import { IconLogin, IconUser2 } from '@/components/Icons';
import Loader from '@/components/ui/Loader'; import Loader from '@/components/ui/Loader';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import useDropdown from '@/hooks/useDropdown'; import useDropdown from '@/hooks/useDropdown';
import { urls } from '../urls'; import { urls } from '../urls';

View File

@ -6,7 +6,7 @@ import axios, { AxiosError, AxiosRequestConfig } from 'axios';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
import { type ErrorData } from '@/components/info/InfoError'; import { type ErrorData } from '@/components/info/InfoError';
import { ILexemeData, IResolutionData, ITextRequest, ITextResult, IWordFormPlain } from '@/models/language'; import { ILexemeData, ITextRequest, ITextResult, IWordFormPlain } from '@/models/language';
import { import {
AccessPolicy, AccessPolicy,
ILibraryItem, ILibraryItem,
@ -444,13 +444,6 @@ export function patchInlineSynthesis(request: FrontExchange<IInlineSynthesisData
}); });
} }
export function postResolveText(schema: string, request: FrontExchange<ITextRequest, IResolutionData>) {
AxiosPost({
endpoint: `/api/rsforms/${schema}/resolve`,
request: request
});
}
export function postInflectText(request: FrontExchange<IWordFormPlain, ITextResult>) { export function postInflectText(request: FrontExchange<IWordFormPlain, ITextResult>) {
AxiosPost({ AxiosPost({
endpoint: `/api/cctext/inflect`, endpoint: `/api/cctext/inflect`,

View File

@ -9,7 +9,7 @@ import { EditorView } from 'codemirror';
import { forwardRef, useCallback, useMemo, useRef } from 'react'; import { forwardRef, useCallback, useMemo, useRef } from 'react';
import Label from '@/components/ui/Label'; import Label from '@/components/ui/Label';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { getFontClassName } from '@/models/miscellaneousAPI'; import { getFontClassName } from '@/models/miscellaneousAPI';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { generateAlias, getCstTypePrefix, guessCstType } from '@/models/rsformAPI'; import { generateAlias, getCstTypePrefix, guessCstType } from '@/models/rsformAPI';

View File

@ -10,7 +10,7 @@ import { AnimatePresence } from 'framer-motion';
import { forwardRef, useCallback, useMemo, useRef, useState } from 'react'; import { forwardRef, useCallback, useMemo, useRef, useState } from 'react';
import Label from '@/components/ui/Label'; import Label from '@/components/ui/Label';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import DlgEditReference from '@/dialogs/DlgEditReference'; import DlgEditReference from '@/dialogs/DlgEditReference';
import { ReferenceType } from '@/models/language'; import { ReferenceType } from '@/models/language';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';

View File

@ -1,10 +1,11 @@
import clsx from 'clsx'; import clsx from 'clsx';
import ConstituentaTooltip from '@/components/info/ConstituentaTooltip';
import { IConstituenta } from '@/models/rsform'; import { IConstituenta } from '@/models/rsform';
import { isMockCst } from '@/models/rsformAPI'; import { isMockCst } from '@/models/rsformAPI';
import { colorFgCstStatus, IColorTheme } from '@/styling/color'; import { colorFgCstStatus, IColorTheme } from '@/styling/color';
import TooltipConstituenta from './TooltipConstituenta';
interface BadgeConstituentaProps { interface BadgeConstituentaProps {
prefixID?: string; prefixID?: string;
value: IConstituenta; value: IConstituenta;
@ -28,7 +29,7 @@ function BadgeConstituenta({ value, prefixID, theme }: BadgeConstituentaProps) {
}} }}
> >
{value.alias} {value.alias}
<ConstituentaTooltip anchor={`#${prefixID}${value.alias}`} data={value} /> <TooltipConstituenta anchor={`#${prefixID}${value.alias}`} data={value} />
</div> </div>
); );
} }

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { GramData } from '@/models/language'; import { GramData } from '@/models/language';
import { colorFgGrammeme } from '@/styling/color'; import { colorFgGrammeme } from '@/styling/color';
import { labelGrammeme } from '@/utils/labels'; import { labelGrammeme } from '@/utils/labels';

View File

@ -2,7 +2,7 @@ import clsx from 'clsx';
import TextURL from '@/components/ui/TextURL'; import TextURL from '@/components/ui/TextURL';
import Tooltip, { PlacesType } from '@/components/ui/Tooltip'; import Tooltip, { PlacesType } from '@/components/ui/Tooltip';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import TopicPage from '../../pages/ManualsPage/TopicPage'; import TopicPage from '../../pages/ManualsPage/TopicPage';

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { CstClass } from '@/models/rsform'; import { CstClass } from '@/models/rsform';
import { colorBgCstClass } from '@/styling/color'; import { colorBgCstClass } from '@/styling/color';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';

View File

@ -1,6 +1,6 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ExpressionStatus } from '@/models/rsform'; import { ExpressionStatus } from '@/models/rsform';
import { colorBgCstStatus } from '@/styling/color'; import { colorBgCstStatus } from '@/styling/color';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';

View File

@ -2,12 +2,12 @@ import InfoConstituenta from '@/components/info/InfoConstituenta';
import Tooltip from '@/components/ui/Tooltip'; import Tooltip from '@/components/ui/Tooltip';
import { IConstituenta } from '@/models/rsform'; import { IConstituenta } from '@/models/rsform';
interface ConstituentaTooltipProps { interface TooltipConstituentaProps {
data: IConstituenta; data: IConstituenta;
anchor: string; anchor: string;
} }
function ConstituentaTooltip({ data, anchor }: ConstituentaTooltipProps) { function TooltipConstituenta({ data, anchor }: TooltipConstituentaProps) {
return ( return (
<Tooltip clickable layer='z-modalTooltip' anchorSelect={anchor} className='max-w-[30rem]'> <Tooltip clickable layer='z-modalTooltip' anchorSelect={anchor} className='max-w-[30rem]'>
<InfoConstituenta data={data} onClick={event => event.stopPropagation()} /> <InfoConstituenta data={data} onClick={event => event.stopPropagation()} />
@ -15,4 +15,4 @@ function ConstituentaTooltip({ data, anchor }: ConstituentaTooltipProps) {
); );
} }
export default ConstituentaTooltip; export default TooltipConstituenta;

View File

@ -4,7 +4,7 @@ import { useEffect, useMemo, useState } from 'react';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import SearchBar from '@/components/ui/SearchBar'; import SearchBar from '@/components/ui/SearchBar';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { CstMatchMode } from '@/models/miscellaneous'; import { CstMatchMode } from '@/models/miscellaneous';
import { IConstituenta } from '@/models/rsform'; import { IConstituenta } from '@/models/rsform';
import { matchConstituenta } from '@/models/rsformAPI'; import { matchConstituenta } from '@/models/rsformAPI';

View File

@ -4,14 +4,14 @@ import clsx from 'clsx';
import { useLayoutEffect, useMemo, useState } from 'react'; import { useLayoutEffect, useMemo, useState } from 'react';
import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
import { isBasicConcept } from '@/models/rsformAPI'; import { isBasicConcept } from '@/models/rsformAPI';
import { describeConstituenta } from '@/utils/labels'; import { describeConstituenta } from '@/utils/labels';
import BadgeConstituenta from '../info/BadgeConstituenta'; import BadgeConstituenta from '../info/BadgeConstituenta';
import NoData from '../ui/NoData'; import NoData from '../ui/NoData';
import GraphSelectionToolbar from './GraphSelectionToolbar'; import ToolbarGraphSelection from './ToolbarGraphSelection';
interface PickMultiConstituentaProps { interface PickMultiConstituentaProps {
id?: string; id?: string;
@ -80,7 +80,7 @@ function PickMultiConstituenta({ id, schema, prefixID, rows, selected, setSelect
Выбраны {selected.length} из {schema?.items.length ?? 0} Выбраны {selected.length} из {schema?.items.length ?? 0}
</span> </span>
{schema ? ( {schema ? (
<GraphSelectionToolbar <ToolbarGraphSelection
graph={schema.graph} graph={schema.graph}
core={schema.items.filter(cst => isBasicConcept(cst.cst_type)).map(cst => cst.id)} core={schema.items.filter(cst => isBasicConcept(cst.cst_type)).map(cst => cst.id)}
setSelected={setSelected} setSelected={setSelected}

View File

@ -4,7 +4,7 @@ import { useIntl } from 'react-intl';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import SearchBar from '@/components/ui/SearchBar'; import SearchBar from '@/components/ui/SearchBar';
import { useLibrary } from '@/context/LibraryContext'; import { useLibrary } from '@/context/LibraryContext';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library'; import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/models/library';
import { ILibraryFilter } from '@/models/miscellaneous'; import { ILibraryFilter } from '@/models/miscellaneous';

View File

@ -7,7 +7,7 @@ import SelectConstituenta from '@/components/select/SelectConstituenta';
import DataTable, { createColumnHelper } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
import Label from '@/components/ui/Label'; import Label from '@/components/ui/Label';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { IConstituenta, IRSForm, ISubstitution } from '@/models/rsform'; import { IConstituenta, IRSForm, ISubstitution } from '@/models/rsform';
import { describeConstituenta } from '@/utils/labels'; import { describeConstituenta } from '@/utils/labels';

View File

@ -6,7 +6,7 @@ import { Grammeme } from '@/models/language';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { DefaultWordForms, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors'; import { DefaultWordForms, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';
import WordformButton from './WordformButton'; import WordformButton from '../../dialogs/DlgEditReference/WordformButton';
interface SelectWordFormProps { interface SelectWordFormProps {
selected: IGrammemeOption[]; selected: IGrammemeOption[];

View File

@ -14,21 +14,21 @@ import {
import { CProps } from '../props'; import { CProps } from '../props';
import MiniButton from '../ui/MiniButton'; import MiniButton from '../ui/MiniButton';
interface GraphSelectionToolbarProps extends CProps.Styling { interface ToolbarGraphSelectionProps extends CProps.Styling {
graph: Graph; graph: Graph;
core: number[]; core: number[];
setSelected: React.Dispatch<React.SetStateAction<number[]>>; setSelected: React.Dispatch<React.SetStateAction<number[]>>;
emptySelection?: boolean; emptySelection?: boolean;
} }
function GraphSelectionToolbar({ function ToolbarGraphSelection({
className, className,
graph, graph,
core, core,
setSelected, setSelected,
emptySelection, emptySelection,
...restProps ...restProps
}: GraphSelectionToolbarProps) { }: ToolbarGraphSelectionProps) {
return ( return (
<div className={clsx('cc-icons', className)} {...restProps}> <div className={clsx('cc-icons', className)} {...restProps}>
<MiniButton <MiniButton
@ -76,4 +76,4 @@ function GraphSelectionToolbar({
); );
} }
export default GraphSelectionToolbar; export default ToolbarGraphSelection;

View File

@ -2,7 +2,7 @@
import { ThreeCircles, ThreeDots } from 'react-loader-spinner'; import { ThreeCircles, ThreeDots } from 'react-loader-spinner';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import AnimateFade from '../wrap/AnimateFade'; import AnimateFade from '../wrap/AnimateFade';

View File

@ -10,7 +10,7 @@ import Select, {
StylesConfig StylesConfig
} from 'react-select'; } from 'react-select';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { selectDarkT, selectLightT } from '@/styling/color'; import { selectDarkT, selectLightT } from '@/styling/color';

View File

@ -10,7 +10,7 @@ import Select, {
StylesConfig StylesConfig
} from 'react-select'; } from 'react-select';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { selectDarkT, selectLightT } from '@/styling/color'; import { selectDarkT, selectLightT } from '@/styling/color';

View File

@ -5,7 +5,7 @@ import { ReactNode } from 'react';
import { createPortal } from 'react-dom'; import { createPortal } from 'react-dom';
import { ITooltip, Tooltip as TooltipImpl } from 'react-tooltip'; import { ITooltip, Tooltip as TooltipImpl } from 'react-tooltip';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
export type { PlacesType } from 'react-tooltip'; export type { PlacesType } from 'react-tooltip';

View File

@ -24,7 +24,7 @@ import { RSFormLoader } from '@/models/RSFormLoader';
import { contextOutsideScope } from '@/utils/labels'; import { contextOutsideScope } from '@/utils/labels';
import { useAuth } from './AuthContext'; import { useAuth } from './AuthContext';
import { useConceptOptions } from './OptionsContext'; import { useConceptOptions } from './ConceptOptionsContext';
interface ILibraryContext { interface ILibraryContext {
items: ILibraryItem[]; items: ILibraryItem[];

View File

@ -17,8 +17,8 @@ import { inferTemplatedType, substituteTemplateArgs } from '@/models/rslangAPI';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import FormCreateCst from '../DlgCreateCst/FormCreateCst'; import FormCreateCst from '../DlgCreateCst/FormCreateCst';
import ArgumentsTab, { IArgumentsState } from './ArgumentsTab'; import TabArguments, { IArgumentsState } from './TabArguments';
import TemplateTab, { ITemplateState } from './TemplateTab'; import TabTemplate, { ITemplateState } from './TabTemplate';
interface DlgConstituentaTemplateProps extends Pick<ModalProps, 'hideWindow'> { interface DlgConstituentaTemplateProps extends Pick<ModalProps, 'hideWindow'> {
schema: IRSForm; schema: IRSForm;
@ -109,7 +109,7 @@ function DlgConstituentaTemplate({ hideWindow, schema, onCreate, insertAfter }:
const templatePanel = useMemo( const templatePanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<TemplateTab state={template} partialUpdate={updateTemplate} /> <TabTemplate state={template} partialUpdate={updateTemplate} />
</TabPanel> </TabPanel>
), ),
[template, updateTemplate] [template, updateTemplate]
@ -118,7 +118,7 @@ function DlgConstituentaTemplate({ hideWindow, schema, onCreate, insertAfter }:
const argumentsPanel = useMemo( const argumentsPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<ArgumentsTab schema={schema} state={substitutes} partialUpdate={updateSubstitutes} /> <TabArguments schema={schema} state={substitutes} partialUpdate={updateSubstitutes} />
</TabPanel> </TabPanel>
), ),
[schema, substitutes, updateSubstitutes] [schema, substitutes, updateSubstitutes]

View File

@ -11,12 +11,12 @@ import DataTable, { IConditionalStyle } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import NoData from '@/components/ui/NoData'; import NoData from '@/components/ui/NoData';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { IConstituenta, IRSForm } from '@/models/rsform'; import { IConstituenta, IRSForm } from '@/models/rsform';
import { IArgumentValue } from '@/models/rslang'; import { IArgumentValue } from '@/models/rslang';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
interface ArgumentsTabProps { interface TabArgumentsProps {
state: IArgumentsState; state: IArgumentsState;
schema: IRSForm; schema: IRSForm;
partialUpdate: React.Dispatch<Partial<IArgumentsState>>; partialUpdate: React.Dispatch<Partial<IArgumentsState>>;
@ -29,7 +29,7 @@ export interface IArgumentsState {
const argumentsHelper = createColumnHelper<IArgumentValue>(); const argumentsHelper = createColumnHelper<IArgumentValue>();
function ArgumentsTab({ state, schema, partialUpdate }: ArgumentsTabProps) { function TabArguments({ state, schema, partialUpdate }: TabArgumentsProps) {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
const [selectedCst, setSelectedCst] = useState<IConstituenta | undefined>(undefined); const [selectedCst, setSelectedCst] = useState<IConstituenta | undefined>(undefined);
@ -226,4 +226,4 @@ function ArgumentsTab({ state, schema, partialUpdate }: ArgumentsTabProps) {
); );
} }
export default ArgumentsTab; export default TabArguments;

View File

@ -17,12 +17,12 @@ export interface ITemplateState {
filterCategory?: IConstituenta; filterCategory?: IConstituenta;
} }
interface TemplateTabProps { interface TabTemplateProps {
state: ITemplateState; state: ITemplateState;
partialUpdate: Dispatch<Partial<ITemplateState>>; partialUpdate: Dispatch<Partial<ITemplateState>>;
} }
function TemplateTab({ state, partialUpdate }: TemplateTabProps) { function TabTemplate({ state, partialUpdate }: TabTemplateProps) {
const { templates, retrieveTemplate } = useLibrary(); const { templates, retrieveTemplate } = useLibrary();
const [templateSchema, setTemplateSchema] = useState<IRSForm | undefined>(undefined); const [templateSchema, setTemplateSchema] = useState<IRSForm | undefined>(undefined);
@ -147,4 +147,4 @@ function TemplateTab({ state, partialUpdate }: TemplateTabProps) {
); );
} }
export default TemplateTab; export default TabTemplate;

View File

@ -8,7 +8,7 @@ import Modal, { ModalProps } from '@/components/ui/Modal';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import ConstituentsList from './ConstituentsList'; import ListConstituents from './ListConstituents';
interface DlgDeleteCstProps extends Pick<ModalProps, 'hideWindow'> { interface DlgDeleteCstProps extends Pick<ModalProps, 'hideWindow'> {
selected: ConstituentaID[]; selected: ConstituentaID[];
@ -41,8 +41,8 @@ function DlgDeleteCst({ hideWindow, selected, schema, onDelete }: DlgDeleteCstPr
onSubmit={handleSubmit} onSubmit={handleSubmit}
className={clsx('cc-column', 'max-w-[60vw] min-w-[30rem]', 'px-6')} className={clsx('cc-column', 'max-w-[60vw] min-w-[30rem]', 'px-6')}
> >
<ConstituentsList title='Выбраны к удалению' list={selected} schema={schema} prefix={prefixes.cst_delete_list} /> <ListConstituents title='Выбраны к удалению' list={selected} schema={schema} prefix={prefixes.cst_delete_list} />
<ConstituentsList <ListConstituents
title='Зависимые конституенты' title='Зависимые конституенты'
list={expansion} list={expansion}
schema={schema} schema={schema}

View File

@ -3,14 +3,14 @@ import clsx from 'clsx';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { labelConstituenta } from '@/utils/labels'; import { labelConstituenta } from '@/utils/labels';
interface ConstituentsListProps { interface ListConstituentsProps {
list: ConstituentaID[]; list: ConstituentaID[];
schema: IRSForm; schema: IRSForm;
prefix: string; prefix: string;
title?: string; title?: string;
} }
function ConstituentsList({ list, schema, title, prefix }: ConstituentsListProps) { function ListConstituents({ list, schema, title, prefix }: ListConstituentsProps) {
return ( return (
<div> <div>
{title ? ( {title ? (
@ -28,4 +28,4 @@ function ConstituentsList({ list, schema, title, prefix }: ConstituentsListProps
); );
} }
export default ConstituentsList; export default ListConstituents;

View File

@ -11,7 +11,7 @@ import Modal from '@/components/ui/Modal';
import { useUsers } from '@/context/UsersContext'; import { useUsers } from '@/context/UsersContext';
import { UserID } from '@/models/user'; import { UserID } from '@/models/user';
import UsersTable from './UsersTable'; import TableUsers from './TableUsers';
interface DlgEditEditorsProps { interface DlgEditEditorsProps {
editors: UserID[]; editors: UserID[];
@ -33,7 +33,7 @@ function DlgEditEditors({ hideWindow, editors, setEditors }: DlgEditEditorsProps
const onAddEditor = useCallback((target: UserID) => setSelected(prev => [...prev, target]), []); const onAddEditor = useCallback((target: UserID) => setSelected(prev => [...prev, target]), []);
const usersTable = useMemo( const usersTable = useMemo(
() => <UsersTable items={users.filter(user => selected.includes(user.id))} onDelete={onDeleteEditor} />, () => <TableUsers items={users.filter(user => selected.includes(user.id))} onDelete={onDeleteEditor} />,
[users, selected, onDeleteEditor] [users, selected, onDeleteEditor]
); );

View File

@ -7,14 +7,14 @@ import DataTable, { createColumnHelper } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import { IUserInfo, UserID } from '@/models/user'; import { IUserInfo, UserID } from '@/models/user';
interface UsersTableProps { interface TableUsersProps {
items: IUserInfo[]; items: IUserInfo[];
onDelete: (target: UserID) => void; onDelete: (target: UserID) => void;
} }
const columnHelper = createColumnHelper<IUserInfo>(); const columnHelper = createColumnHelper<IUserInfo>();
function UsersTable({ items, onDelete }: UsersTableProps) { function TableUsers({ items, onDelete }: TableUsersProps) {
const columns = useMemo( const columns = useMemo(
() => [ () => [
columnHelper.accessor('last_name', { columnHelper.accessor('last_name', {
@ -61,4 +61,4 @@ function UsersTable({ items, onDelete }: UsersTableProps) {
); );
} }
export default UsersTable; export default TableUsers;

View File

@ -14,8 +14,8 @@ import { IRSForm } from '@/models/rsform';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import { labelReferenceType } from '@/utils/labels'; import { labelReferenceType } from '@/utils/labels';
import EntityTab from './EntityTab'; import TabEntityReference from './TabEntityReference';
import SyntacticTab from './SyntacticTab'; import TabSyntacticReference from './TabSyntacticReference';
export interface IReferenceInputState { export interface IReferenceInputState {
type: ReferenceType; type: ReferenceType;
@ -48,7 +48,7 @@ function DlgEditReference({ hideWindow, schema, initial, onSave }: DlgEditRefere
const entityPanel = useMemo( const entityPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<EntityTab initial={initial} schema={schema} setReference={setReference} setIsValid={setIsValid} /> <TabEntityReference initial={initial} schema={schema} setReference={setReference} setIsValid={setIsValid} />
</TabPanel> </TabPanel>
), ),
[initial, schema] [initial, schema]
@ -57,7 +57,7 @@ function DlgEditReference({ hideWindow, schema, initial, onSave }: DlgEditRefere
const syntacticPanel = useMemo( const syntacticPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<SyntacticTab initial={initial} setReference={setReference} setIsValid={setIsValid} /> <TabSyntacticReference initial={initial} setReference={setReference} setIsValid={setIsValid} />
</TabPanel> </TabPanel>
), ),
[initial] [initial]

View File

@ -15,17 +15,17 @@ import { matchConstituenta } from '@/models/rsformAPI';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { IGrammemeOption, SelectorGrammemes } from '@/utils/selectors'; import { IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';
import SelectWordForm from '../../components/select/SelectWordForm';
import { IReferenceInputState } from './DlgEditReference'; import { IReferenceInputState } from './DlgEditReference';
import SelectWordForm from './SelectWordForm';
interface EntityTabProps { interface TabEntityReferenceProps {
initial: IReferenceInputState; initial: IReferenceInputState;
schema: IRSForm; schema: IRSForm;
setIsValid: React.Dispatch<React.SetStateAction<boolean>>; setIsValid: React.Dispatch<React.SetStateAction<boolean>>;
setReference: React.Dispatch<React.SetStateAction<string>>; setReference: React.Dispatch<React.SetStateAction<string>>;
} }
function EntityTab({ initial, schema, setIsValid, setReference }: EntityTabProps) { function TabEntityReference({ initial, schema, setIsValid, setReference }: TabEntityReferenceProps) {
const [selectedCst, setSelectedCst] = useState<IConstituenta | undefined>(undefined); const [selectedCst, setSelectedCst] = useState<IConstituenta | undefined>(undefined);
const [alias, setAlias] = useState(''); const [alias, setAlias] = useState('');
const [term, setTerm] = useState(''); const [term, setTerm] = useState('');
@ -112,4 +112,4 @@ function EntityTab({ initial, schema, setIsValid, setReference }: EntityTabProps
); );
} }
export default EntityTab; export default TabEntityReference;

View File

@ -9,13 +9,13 @@ import { parseSyntacticReference } from '@/models/languageAPI';
import { IReferenceInputState } from './DlgEditReference'; import { IReferenceInputState } from './DlgEditReference';
interface SyntacticTabProps { interface TabSyntacticReferenceProps {
initial: IReferenceInputState; initial: IReferenceInputState;
setIsValid: React.Dispatch<React.SetStateAction<boolean>>; setIsValid: React.Dispatch<React.SetStateAction<boolean>>;
setReference: React.Dispatch<React.SetStateAction<string>>; setReference: React.Dispatch<React.SetStateAction<string>>;
} }
function SyntacticTab({ initial, setIsValid, setReference }: SyntacticTabProps) { function TabSyntacticReference({ initial, setIsValid, setReference }: TabSyntacticReferenceProps) {
const [nominal, setNominal] = useState(''); const [nominal, setNominal] = useState('');
const [offset, setOffset] = useState(1); const [offset, setOffset] = useState(1);
@ -74,4 +74,4 @@ function SyntacticTab({ initial, setIsValid, setReference }: SyntacticTabProps)
); );
} }
export default SyntacticTab; export default TabSyntacticReference;

View File

@ -10,7 +10,7 @@ import TextInput from '@/components/ui/TextInput';
import { useRSForm } from '@/context/RSFormContext'; import { useRSForm } from '@/context/RSFormContext';
import { IVersionData, IVersionInfo, VersionID } from '@/models/library'; import { IVersionData, IVersionInfo, VersionID } from '@/models/library';
import VersionsTable from './VersionsTable'; import TableVersions from './TableVersions';
interface DlgEditVersionsProps { interface DlgEditVersionsProps {
hideWindow: () => void; hideWindow: () => void;
@ -66,7 +66,7 @@ function DlgEditVersions({ hideWindow, versions, onDelete, onUpdate }: DlgEditVe
const versionsTable = useMemo( const versionsTable = useMemo(
() => ( () => (
<VersionsTable <TableVersions
processing={processing} processing={processing}
items={versions} items={versions}
onDelete={onDelete} onDelete={onDelete}

View File

@ -7,10 +7,10 @@ import { useIntl } from 'react-intl';
import { IconRemove } from '@/components/Icons'; import { IconRemove } from '@/components/Icons';
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { IVersionInfo, VersionID } from '@/models/library'; import { IVersionInfo, VersionID } from '@/models/library';
interface VersionsTableProps { interface TableVersionsProps {
processing: boolean; processing: boolean;
items: IVersionInfo[]; items: IVersionInfo[];
selected?: VersionID; selected?: VersionID;
@ -20,7 +20,7 @@ interface VersionsTableProps {
const columnHelper = createColumnHelper<IVersionInfo>(); const columnHelper = createColumnHelper<IVersionInfo>();
function VersionsTable({ processing, items, onDelete, selected, onSelect }: VersionsTableProps) { function TableVersions({ processing, items, onDelete, selected, onSelect }: TableVersionsProps) {
const intl = useIntl(); const intl = useIntl();
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
@ -102,4 +102,4 @@ function VersionsTable({ processing, items, onDelete, selected, onSelect }: Vers
); );
} }
export default VersionsTable; export default TableVersions;

View File

@ -20,7 +20,7 @@ import { PARAMETER } from '@/utils/constants';
import { prompts } from '@/utils/labels'; import { prompts } from '@/utils/labels';
import { IGrammemeOption, SelectorGrammemes, SelectorGrammemesList } from '@/utils/selectors'; import { IGrammemeOption, SelectorGrammemes, SelectorGrammemesList } from '@/utils/selectors';
import WordFormsTable from './WordFormsTable'; import TableWordForms from './TableWordForms';
interface DlgEditWordFormsProps { interface DlgEditWordFormsProps {
hideWindow: () => void; hideWindow: () => void;
@ -216,7 +216,7 @@ function DlgEditWordForms({ hideWindow, target, onSave }: DlgEditWordFormsProps)
</div> </div>
</div> </div>
<WordFormsTable forms={forms} setForms={setForms} onFormSelect={handleSelectForm} /> <TableWordForms forms={forms} setForms={setForms} onFormSelect={handleSelectForm} />
</Modal> </Modal>
); );
} }

View File

@ -10,7 +10,7 @@ import MiniButton from '@/components/ui/MiniButton';
import NoData from '@/components/ui/NoData'; import NoData from '@/components/ui/NoData';
import { IWordForm } from '@/models/language'; import { IWordForm } from '@/models/language';
interface WordFormsTableProps { interface TableWordFormsProps {
forms: IWordForm[]; forms: IWordForm[];
setForms: React.Dispatch<React.SetStateAction<IWordForm[]>>; setForms: React.Dispatch<React.SetStateAction<IWordForm[]>>;
onFormSelect?: (form: IWordForm) => void; onFormSelect?: (form: IWordForm) => void;
@ -18,7 +18,7 @@ interface WordFormsTableProps {
const columnHelper = createColumnHelper<IWordForm>(); const columnHelper = createColumnHelper<IWordForm>();
function WordFormsTable({ forms, setForms, onFormSelect }: WordFormsTableProps) { function TableWordForms({ forms, setForms, onFormSelect }: TableWordFormsProps) {
const handleDeleteRow = useCallback( const handleDeleteRow = useCallback(
(row: number) => { (row: number) => {
setForms(prev => { setForms(prev => {
@ -89,4 +89,4 @@ function WordFormsTable({ forms, setForms, onFormSelect }: WordFormsTableProps)
); );
} }
export default WordFormsTable; export default TableWordForms;

View File

@ -10,9 +10,9 @@ import useRSFormDetails from '@/hooks/useRSFormDetails';
import { LibraryItemID } from '@/models/library'; import { LibraryItemID } from '@/models/library';
import { IInlineSynthesisData, IRSForm, ISubstitution } from '@/models/rsform'; import { IInlineSynthesisData, IRSForm, ISubstitution } from '@/models/rsform';
import ConstituentsTab from './ConstituentsTab'; import TabConstituents from './TabConstituents';
import SchemaTab from './SchemaTab'; import TabSchema from './TabSchema';
import SubstitutionsTab from './SubstitutionsTab'; import TabSubstitutions from './TabSubstitutions';
interface DlgInlineSynthesisProps extends Pick<ModalProps, 'hideWindow'> { interface DlgInlineSynthesisProps extends Pick<ModalProps, 'hideWindow'> {
receiver: IRSForm; receiver: IRSForm;
@ -61,7 +61,7 @@ function DlgInlineSynthesis({ hideWindow, receiver, onInlineSynthesis }: DlgInli
const schemaPanel = useMemo( const schemaPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<SchemaTab selected={donorID} setSelected={setDonorID} /> <TabSchema selected={donorID} setSelected={setDonorID} />
</TabPanel> </TabPanel>
), ),
[donorID] [donorID]
@ -69,7 +69,7 @@ function DlgInlineSynthesis({ hideWindow, receiver, onInlineSynthesis }: DlgInli
const itemsPanel = useMemo( const itemsPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<ConstituentsTab <TabConstituents
schema={source.schema} schema={source.schema}
loading={source.loading} loading={source.loading}
selected={selected} selected={selected}
@ -82,7 +82,7 @@ function DlgInlineSynthesis({ hideWindow, receiver, onInlineSynthesis }: DlgInli
const substitutesPanel = useMemo( const substitutesPanel = useMemo(
() => ( () => (
<TabPanel> <TabPanel>
<SubstitutionsTab <TabSubstitutions
receiver={receiver} receiver={receiver}
source={source.schema} source={source.schema}
selected={selected} selected={selected}

View File

@ -6,7 +6,7 @@ import DataLoader from '@/components/wrap/DataLoader';
import { ConstituentaID, IRSForm } from '@/models/rsform'; import { ConstituentaID, IRSForm } from '@/models/rsform';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
interface ConstituentsTabProps { interface TabConstituentsProps {
schema?: IRSForm; schema?: IRSForm;
loading?: boolean; loading?: boolean;
error?: ErrorData; error?: ErrorData;
@ -14,7 +14,7 @@ interface ConstituentsTabProps {
setSelected: React.Dispatch<React.SetStateAction<ConstituentaID[]>>; setSelected: React.Dispatch<React.SetStateAction<ConstituentaID[]>>;
} }
function ConstituentsTab({ schema, error, loading, selected, setSelected }: ConstituentsTabProps) { function TabConstituents({ schema, error, loading, selected, setSelected }: TabConstituentsProps) {
return ( return (
<DataLoader id='dlg-constituents-tab' isLoading={loading} error={error} hasNoData={!schema}> <DataLoader id='dlg-constituents-tab' isLoading={loading} error={error} hasNoData={!schema}>
<PickMultiConstituenta <PickMultiConstituenta
@ -28,4 +28,4 @@ function ConstituentsTab({ schema, error, loading, selected, setSelected }: Cons
); );
} }
export default ConstituentsTab; export default TabConstituents;

View File

@ -8,12 +8,12 @@ import AnimateFade from '@/components/wrap/AnimateFade';
import { useLibrary } from '@/context/LibraryContext'; import { useLibrary } from '@/context/LibraryContext';
import { LibraryItemID } from '@/models/library'; import { LibraryItemID } from '@/models/library';
interface SchemaTabProps { interface TabSchemaProps {
selected?: LibraryItemID; selected?: LibraryItemID;
setSelected: (newValue: LibraryItemID) => void; setSelected: (newValue: LibraryItemID) => void;
} }
function SchemaTab({ selected, setSelected }: SchemaTabProps) { function TabSchema({ selected, setSelected }: TabSchemaProps) {
const library = useLibrary(); const library = useLibrary();
const selectedInfo = useMemo(() => library.items.find(item => item.id === selected), [selected, library.items]); const selectedInfo = useMemo(() => library.items.find(item => item.id === selected), [selected, library.items]);
@ -41,4 +41,4 @@ function SchemaTab({ selected, setSelected }: SchemaTabProps) {
); );
} }
export default SchemaTab; export default TabSchema;

View File

@ -7,7 +7,7 @@ import { prefixes } from '@/utils/constants';
import PickSubstitutions from '../../components/select/PickSubstitutions'; import PickSubstitutions from '../../components/select/PickSubstitutions';
interface SubstitutionsTabProps { interface TabSubstitutionsProps {
receiver?: IRSForm; receiver?: IRSForm;
source?: IRSForm; source?: IRSForm;
selected: ConstituentaID[]; selected: ConstituentaID[];
@ -19,7 +19,7 @@ interface SubstitutionsTabProps {
setSubstitutions: React.Dispatch<React.SetStateAction<ISubstitution[]>>; setSubstitutions: React.Dispatch<React.SetStateAction<ISubstitution[]>>;
} }
function SubstitutionsTab({ function TabSubstitutions({
source, source,
receiver, receiver,
selected, selected,
@ -29,7 +29,7 @@ function SubstitutionsTab({
substitutions, substitutions,
setSubstitutions setSubstitutions
}: SubstitutionsTabProps) { }: TabSubstitutionsProps) {
return ( return (
<DataLoader id='dlg-substitutions-tab' className='cc-column' isLoading={loading} error={error} hasNoData={!source}> <DataLoader id='dlg-substitutions-tab' className='cc-column' isLoading={loading} error={error} hasNoData={!source}>
<PickSubstitutions <PickSubstitutions
@ -45,4 +45,4 @@ function SubstitutionsTab({
); );
} }
export default SubstitutionsTab; export default TabSubstitutions;

View File

@ -6,7 +6,7 @@ import BadgeHelp from '@/components/info/BadgeHelp';
import GraphUI, { GraphEdge, GraphNode } from '@/components/ui/GraphUI'; import GraphUI, { GraphEdge, GraphNode } from '@/components/ui/GraphUI';
import Modal, { ModalProps } from '@/components/ui/Modal'; import Modal, { ModalProps } from '@/components/ui/Modal';
import Overlay from '@/components/ui/Overlay'; import Overlay from '@/components/ui/Overlay';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { SyntaxTree } from '@/models/rslang'; import { SyntaxTree } from '@/models/rslang';
import { graphDarkT, graphLightT } from '@/styling/color'; import { graphDarkT, graphLightT } from '@/styling/color';

View File

@ -1,34 +0,0 @@
'use client';
import { useCallback, useState } from 'react';
import { DataCallback, postResolveText } from '@/app/backendAPI';
import { ErrorData } from '@/components/info/InfoError';
import { IResolutionData } from '@/models/language';
import { IRSForm } from '@/models/rsform';
function useResolveText({ schema }: { schema?: IRSForm }) {
const [processing, setProcessing] = useState(false);
const [error, setError] = useState<ErrorData>(undefined);
const [refsData, setRefsData] = useState<IResolutionData | undefined>(undefined);
const resetData = useCallback(() => setRefsData(undefined), []);
function resolveText(text: string, onSuccess?: DataCallback<IResolutionData>) {
setError(undefined);
postResolveText(String(schema!.id), {
data: { text: text },
showError: true,
setLoading: setProcessing,
onError: setError,
onSuccess: data => {
setRefsData(data);
if (onSuccess) onSuccess(data);
}
});
}
return { refsData, resolveText, resetData, error, setError, processing };
}
export default useResolveText;

View File

@ -291,12 +291,3 @@ export interface IResolvedReference extends IReference {
pos_input: ITextPosition; pos_input: ITextPosition;
pos_output: ITextPosition; pos_output: ITextPosition;
} }
/**
* Represents resolved references data for the whole text.
*/
export interface IResolutionData {
input: string;
output: string;
refs: IResolvedReference[];
}

View File

@ -12,9 +12,9 @@ import { ILibraryFilter } from '@/models/miscellaneous';
import { storage } from '@/utils/constants'; import { storage } from '@/utils/constants';
import { toggleTristateFlag } from '@/utils/utils'; import { toggleTristateFlag } from '@/utils/utils';
import LibraryFolders from './LibraryFolders'; import TableLibraryItems from './TableLibraryItems';
import LibraryTable from './LibraryTable'; import ToolbarSearch from './ToolbarSearch';
import SearchPanel from './SearchPanel'; import ViewSideFolders from './ViewSideFolders';
function LibraryPage() { function LibraryPage() {
const library = useLibrary(); const library = useLibrary();
@ -86,7 +86,7 @@ function LibraryPage() {
const view = useMemo( const view = useMemo(
() => ( () => (
<LibraryTable <TableLibraryItems
resetQuery={resetFilter} // prettier: split lines resetQuery={resetFilter} // prettier: split lines
items={items} items={items}
folderMode={folderMode} folderMode={folderMode}
@ -103,7 +103,7 @@ function LibraryPage() {
error={library.loadingError} error={library.loadingError}
hasNoData={library.items.length === 0} hasNoData={library.items.length === 0}
> >
<SearchPanel <ToolbarSearch
total={library.items.length ?? 0} total={library.items.length ?? 0}
filtered={items.length} filtered={items.length}
hasCustomFilter={hasCustomFilter} hasCustomFilter={hasCustomFilter}
@ -129,7 +129,7 @@ function LibraryPage() {
<div className='flex'> <div className='flex'>
<AnimatePresence initial={false}> <AnimatePresence initial={false}>
{folderMode ? ( {folderMode ? (
<LibraryFolders <ViewSideFolders
currentFolder={folder} // prettier: split-lines currentFolder={folder} // prettier: split-lines
setFolder={setFolder} setFolder={setFolder}
folders={library.folders} folders={library.folders}

View File

@ -12,15 +12,15 @@ import DataTable, { createColumnHelper, IConditionalStyle, VisibilityState } fro
import FlexColumn from '@/components/ui/FlexColumn'; import FlexColumn from '@/components/ui/FlexColumn';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import TextURL from '@/components/ui/TextURL'; import TextURL from '@/components/ui/TextURL';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { useUsers } from '@/context/UsersContext'; import { useUsers } from '@/context/UsersContext';
import useLocalStorage from '@/hooks/useLocalStorage'; import useLocalStorage from '@/hooks/useLocalStorage';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { ILibraryItem, LibraryItemType } from '@/models/library'; import { ILibraryItem, LibraryItemType } from '@/models/library';
import { storage } from '@/utils/constants'; import { storage } from '@/utils/constants';
interface LibraryTableProps { interface TableLibraryItemsProps {
items: ILibraryItem[]; items: ILibraryItem[];
resetQuery: () => void; resetQuery: () => void;
folderMode: boolean; folderMode: boolean;
@ -29,7 +29,7 @@ interface LibraryTableProps {
const columnHelper = createColumnHelper<ILibraryItem>(); const columnHelper = createColumnHelper<ILibraryItem>();
function LibraryTable({ items, resetQuery, folderMode, toggleFolderMode }: LibraryTableProps) { function TableLibraryItems({ items, resetQuery, folderMode, toggleFolderMode }: TableLibraryItemsProps) {
const router = useConceptNavigation(); const router = useConceptNavigation();
const intl = useIntl(); const intl = useIntl();
const { getUserLabel } = useUsers(); const { getUserLabel } = useUsers();
@ -188,4 +188,4 @@ function LibraryTable({ items, resetQuery, folderMode, toggleFolderMode }: Libra
); );
} }
export default LibraryTable; export default TableLibraryItems;

View File

@ -18,7 +18,7 @@ import { prefixes } from '@/utils/constants';
import { describeLocationHead, labelLocationHead } from '@/utils/labels'; import { describeLocationHead, labelLocationHead } from '@/utils/labels';
import { tripleToggleColor } from '@/utils/utils'; import { tripleToggleColor } from '@/utils/utils';
interface SearchPanelProps { interface ToolbarSearchProps {
total: number; total: number;
filtered: number; filtered: number;
hasCustomFilter: boolean; hasCustomFilter: boolean;
@ -44,7 +44,7 @@ interface SearchPanelProps {
resetFilter: () => void; resetFilter: () => void;
} }
function SearchPanel({ function ToolbarSearch({
total, total,
filtered, filtered,
hasCustomFilter, hasCustomFilter,
@ -68,7 +68,7 @@ function SearchPanel({
isEditor, isEditor,
toggleEditor, toggleEditor,
resetFilter resetFilter
}: SearchPanelProps) { }: ToolbarSearchProps) {
const { user } = useAuth(); const { user } = useAuth();
const headMenu = useDropdown(); const headMenu = useDropdown();
@ -219,4 +219,4 @@ function SearchPanel({
); );
} }
export default SearchPanel; export default ToolbarSearch;

View File

@ -14,14 +14,14 @@ import { animateSideView } from '@/styling/animations';
import { PARAMETER, prefixes } from '@/utils/constants'; import { PARAMETER, prefixes } from '@/utils/constants';
import { information } from '@/utils/labels'; import { information } from '@/utils/labels';
interface LibraryTableProps { interface ViewSideFoldersProps {
folders: FolderTree; folders: FolderTree;
currentFolder: string; currentFolder: string;
setFolder: React.Dispatch<React.SetStateAction<string>>; setFolder: React.Dispatch<React.SetStateAction<string>>;
toggleFolderMode: () => void; toggleFolderMode: () => void;
} }
function LibraryFolders({ folders, currentFolder, setFolder, toggleFolderMode }: LibraryTableProps) { function ViewSideFolders({ folders, currentFolder, setFolder, toggleFolderMode }: ViewSideFoldersProps) {
const handleClickFolder = useCallback( const handleClickFolder = useCallback(
(event: CProps.EventMouse, target: FolderNode) => { (event: CProps.EventMouse, target: FolderNode) => {
event.preventDefault(); event.preventDefault();
@ -68,4 +68,4 @@ function LibraryFolders({ folders, currentFolder, setFolder, toggleFolderMode }:
); );
} }
export default LibraryFolders; export default ViewSideFolders;

View File

@ -3,8 +3,8 @@
import { useCallback } from 'react'; import { useCallback } from 'react';
import { urls } from '@/app/urls'; import { urls } from '@/app/urls';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import useQueryStrings from '@/hooks/useQueryStrings'; import useQueryStrings from '@/hooks/useQueryStrings';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';

View File

@ -7,7 +7,7 @@ import { useCallback } from 'react';
import { IconMenuFold, IconMenuUnfold } from '@/components/Icons'; import { IconMenuFold, IconMenuUnfold } from '@/components/Icons';
import Button from '@/components/ui/Button'; import Button from '@/components/ui/Button';
import SelectTree from '@/components/ui/SelectTree'; import SelectTree from '@/components/ui/SelectTree';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useDropdown from '@/hooks/useDropdown'; import useDropdown from '@/hooks/useDropdown';
import { HelpTopic, topicParent } from '@/models/miscellaneous'; import { HelpTopic, topicParent } from '@/models/miscellaneous';
import { animateSlideLeft } from '@/styling/animations'; import { animateSlideLeft } from '@/styling/animations';

View File

@ -1,7 +1,7 @@
import clsx from 'clsx'; import clsx from 'clsx';
import SelectTree from '@/components/ui/SelectTree'; import SelectTree from '@/components/ui/SelectTree';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { HelpTopic, topicParent } from '@/models/miscellaneous'; import { HelpTopic, topicParent } from '@/models/miscellaneous';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { describeHelpTopic, labelHelpTopic } from '@/utils/labels'; import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';

View File

@ -14,7 +14,7 @@ import {
IconTree IconTree
} from '@/components/Icons'; } from '@/components/Icons';
import LinkTopic from '@/components/ui/LinkTopic'; import LinkTopic from '@/components/ui/LinkTopic';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
function HelpCstEditor() { function HelpCstEditor() {

View File

@ -1,4 +1,4 @@
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
function HelpFormulaTree() { function HelpFormulaTree() {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();

View File

@ -1,6 +1,6 @@
import Divider from '@/components/ui/Divider'; import Divider from '@/components/ui/Divider';
import LinkTopic from '@/components/ui/LinkTopic'; import LinkTopic from '@/components/ui/LinkTopic';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { HelpTopic } from '@/models/miscellaneous'; import { HelpTopic } from '@/models/miscellaneous';
import { import {
@ -68,7 +68,7 @@ function HelpTermGraph() {
<Divider margins='my-3' className='hidden sm:block' /> <Divider margins='my-3' className='hidden sm:block' />
<div className='flex mb-3 flex-col-reverse sm:flex-row'> <div className='flex flex-col-reverse mb-3 sm:flex-row'>
<div className='w-full sm:w-[14rem]'> <div className='w-full sm:w-[14rem]'>
<h1>Общие</h1> <h1>Общие</h1>
<li> <li>

View File

@ -7,11 +7,11 @@ import AnimateFade from '@/components/wrap/AnimateFade';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useOSS } from '@/context/OssContext'; import { useOSS } from '@/context/OssContext';
import EditorLibraryItem from '@/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem'; import EditorLibraryItem from '@/pages/RSFormPage/EditorRSFormCard/EditorLibraryItem';
import ToolbarRSFormCard from '@/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard';
import { globals } from '@/utils/constants'; import { globals } from '@/utils/constants';
import { useOssEdit } from '../OssEditContext'; import { useOssEdit } from '../OssEditContext';
import FormOSS from './FormOSS'; import FormOSS from './FormOSS';
import RSFormToolbar from './OssFormToolbar';
interface EditorOssCardProps { interface EditorOssCardProps {
isModified: boolean; isModified: boolean;
@ -42,7 +42,7 @@ function EditorOssCard({ isModified, onDestroy, setIsModified }: EditorOssCardPr
return ( return (
<> <>
<RSFormToolbar <ToolbarRSFormCard
subscribed={isSubscribed} subscribed={isSubscribed}
modified={isModified} modified={isModified}
anonymous={!user} anonymous={!user}

View File

@ -10,7 +10,7 @@ import TextArea from '@/components/ui/TextArea';
import TextInput from '@/components/ui/TextInput'; import TextInput from '@/components/ui/TextInput';
import { useOSS } from '@/context/OssContext'; import { useOSS } from '@/context/OssContext';
import { ILibraryUpdateData, LibraryItemType } from '@/models/library'; import { ILibraryUpdateData, LibraryItemType } from '@/models/library';
import AccessToolbar from '@/pages/RSFormPage/EditorRSFormCard/AccessToolbar'; import ToolbarItemAccess from '@/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess';
import { limits, patterns } from '@/utils/constants'; import { limits, patterns } from '@/utils/constants';
import { information } from '@/utils/labels'; import { information } from '@/utils/labels';
@ -108,7 +108,7 @@ function FormOSS({ id, isModified, setIsModified }: FormOSSProps) {
value={alias} value={alias}
onChange={event => setAlias(event.target.value)} onChange={event => setAlias(event.target.value)}
/> />
<AccessToolbar <ToolbarItemAccess
visible={visible} visible={visible}
toggleVisible={() => setVisible(prev => !prev)} toggleVisible={() => setVisible(prev => !prev)}
readOnly={readOnly} readOnly={readOnly}

View File

@ -1,66 +0,0 @@
'use client';
import { useMemo } from 'react';
import { SubscribeIcon } from '@/components/DomainIcons';
import { IconDestroy, IconSave, IconShare } from '@/components/Icons';
import BadgeHelp from '@/components/info/BadgeHelp';
import MiniButton from '@/components/ui/MiniButton';
import Overlay from '@/components/ui/Overlay';
import { useAccessMode } from '@/context/AccessModeContext';
import { HelpTopic } from '@/models/miscellaneous';
import { UserLevel } from '@/models/user';
import { PARAMETER } from '@/utils/constants';
import { prepareTooltip } from '@/utils/labels';
import { useOssEdit } from '../OssEditContext';
interface RSFormToolbarProps {
modified: boolean;
subscribed: boolean;
anonymous: boolean;
onSubmit: () => void;
onDestroy: () => void;
}
function RSFormToolbar({ modified, anonymous, subscribed, onSubmit, onDestroy }: RSFormToolbarProps) {
const controller = useOssEdit();
const { accessLevel } = useAccessMode();
const canSave = useMemo(() => modified && !controller.isProcessing, [modified, controller.isProcessing]);
return (
<Overlay position='top-1 right-1/2 translate-x-1/2' className='cc-icons'>
{controller.isMutable || modified ? (
<MiniButton
titleHtml={prepareTooltip('Сохранить изменения', 'Ctrl + S')}
disabled={!canSave}
icon={<IconSave size='1.25rem' className='icon-primary' />}
onClick={onSubmit}
/>
) : null}
<MiniButton
title='Поделиться схемой'
icon={<IconShare size='1.25rem' className='icon-primary' />}
onClick={controller.share}
/>
{!anonymous ? (
<MiniButton
titleHtml={`Отслеживание <b>${subscribed ? 'включено' : 'выключено'}</b>`}
icon={<SubscribeIcon value={subscribed} className={subscribed ? 'icon-primary' : 'clr-text-controls'} />}
disabled={controller.isProcessing}
onClick={controller.toggleSubscribe}
/>
) : null}
{controller.isMutable ? (
<MiniButton
title='Удалить схему'
icon={<IconDestroy size='1.25rem' className='icon-red' />}
disabled={!controller.isMutable || controller.isProcessing || accessLevel < UserLevel.OWNER}
onClick={onDestroy}
/>
) : null}
<BadgeHelp topic={HelpTopic.UI_RS_CARD} offset={4} className={PARAMETER.TOOLTIP_WIDTH} />
</Overlay>
);
}
export default RSFormToolbar;

View File

@ -27,11 +27,11 @@ import { describeAccessMode, labelAccessMode } from '@/utils/labels';
import { useOssEdit } from './OssEditContext'; import { useOssEdit } from './OssEditContext';
interface OssTabsMenuProps { interface MenuOssTabsProps {
onDestroy: () => void; onDestroy: () => void;
} }
function OssTabsMenu({ onDestroy }: OssTabsMenuProps) { function MenuOssTabs({ onDestroy }: MenuOssTabsProps) {
const controller = useOssEdit(); const controller = useOssEdit();
const router = useConceptNavigation(); const router = useConceptNavigation();
const { user } = useAuth(); const { user } = useAuth();
@ -200,4 +200,4 @@ function OssTabsMenu({ onDestroy }: OssTabsMenuProps) {
); );
} }
export default OssTabsMenu; export default MenuOssTabs;

View File

@ -6,7 +6,7 @@ import { toast } from 'react-toastify';
import { useAccessMode } from '@/context/AccessModeContext'; import { useAccessMode } from '@/context/AccessModeContext';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useOSS } from '@/context/OssContext'; import { useOSS } from '@/context/OssContext';
import DlgChangeLocation from '@/dialogs/DlgChangeLocation'; import DlgChangeLocation from '@/dialogs/DlgChangeLocation';
import DlgEditEditors from '@/dialogs/DlgEditEditors'; import DlgEditEditors from '@/dialogs/DlgEditEditors';

View File

@ -12,17 +12,17 @@ import Loader from '@/components/ui/Loader';
import TabLabel from '@/components/ui/TabLabel'; import TabLabel from '@/components/ui/TabLabel';
import TextURL from '@/components/ui/TextURL'; import TextURL from '@/components/ui/TextURL';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useLibrary } from '@/context/LibraryContext'; import { useLibrary } from '@/context/LibraryContext';
import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext'; import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { useOSS } from '@/context/OssContext'; import { useOSS } from '@/context/OssContext';
import useQueryStrings from '@/hooks/useQueryStrings'; import useQueryStrings from '@/hooks/useQueryStrings';
import { information, prompts } from '@/utils/labels'; import { information, prompts } from '@/utils/labels';
import EditorRSForm from './EditorOssCard'; import EditorRSForm from './EditorOssCard';
import EditorTermGraph from './EditorOssGraph'; import EditorTermGraph from './EditorOssGraph';
import MenuOssTabs from './MenuOssTabs';
import { OssEditState } from './OssEditContext'; import { OssEditState } from './OssEditContext';
import OssTabsMenu from './OssTabsMenu';
export enum OssTabID { export enum OssTabID {
CARD = 0, CARD = 0,
@ -131,7 +131,7 @@ function OssTabs() {
className='flex flex-col mx-auto min-w-fit' className='flex flex-col mx-auto min-w-fit'
> >
<TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}> <TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}>
<OssTabsMenu onDestroy={onDestroySchema} /> <MenuOssTabs onDestroy={onDestroySchema} />
<TabLabel label='Карточка' titleHtml={`Название: <b>${schema.title ?? ''}</b>`} /> <TabLabel label='Карточка' titleHtml={`Название: <b>${schema.title ?? ''}</b>`} />
<TabLabel label='Граф' /> <TabLabel label='Граф' />

View File

@ -4,7 +4,7 @@ import clsx from 'clsx';
import { AnimatePresence } from 'framer-motion'; import { AnimatePresence } from 'framer-motion';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useLocalStorage from '@/hooks/useLocalStorage'; import useLocalStorage from '@/hooks/useLocalStorage';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { ConstituentaID, IConstituenta } from '@/models/rsform'; import { ConstituentaID, IConstituenta } from '@/models/rsform';
@ -12,8 +12,8 @@ import { globals, storage } from '@/utils/constants';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
import ViewConstituents from '../ViewConstituents'; import ViewConstituents from '../ViewConstituents';
import ConstituentaToolbar from './ConstituentaToolbar';
import FormConstituenta from './FormConstituenta'; import FormConstituenta from './FormConstituenta';
import ToolbarConstituenta from './ToolbarConstituenta';
// Threshold window width to switch layout. // Threshold window width to switch layout.
const SIDELIST_LAYOUT_THRESHOLD = 1000; // px const SIDELIST_LAYOUT_THRESHOLD = 1000; // px
@ -81,7 +81,7 @@ function EditorConstituenta({ activeCst, isModified, setIsModified, onOpenEdit }
return ( return (
<div className='overflow-y-auto' style={{ maxHeight: panelHeight }}> <div className='overflow-y-auto' style={{ maxHeight: panelHeight }}>
{controller.isContentEditable ? ( {controller.isContentEditable ? (
<ConstituentaToolbar <ToolbarConstituenta
disabled={disabled} disabled={disabled}
modified={isModified} modified={isModified}
showList={showList} showList={showList}

View File

@ -16,7 +16,7 @@ import { HelpTopic } from '@/models/miscellaneous';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
import { prepareTooltip, tooltips } from '@/utils/labels'; import { prepareTooltip, tooltips } from '@/utils/labels';
interface ConstituentaToolbarProps { interface ToolbarConstituentaProps {
disabled: boolean; disabled: boolean;
modified: boolean; modified: boolean;
showList: boolean; showList: boolean;
@ -32,7 +32,7 @@ interface ConstituentaToolbarProps {
onToggleList: () => void; onToggleList: () => void;
} }
function ConstituentaToolbar({ function ToolbarConstituenta({
disabled, disabled,
modified, modified,
showList, showList,
@ -45,7 +45,7 @@ function ConstituentaToolbar({
onClone, onClone,
onCreate, onCreate,
onToggleList onToggleList
}: ConstituentaToolbarProps) { }: ToolbarConstituentaProps) {
return ( return (
<Overlay position='top-1 right-4' className='cc-icons sm:right-1/2 sm:translate-x-1/2'> <Overlay position='top-1 right-4' className='cc-icons sm:right-1/2 sm:translate-x-1/2'>
<MiniButton <MiniButton
@ -100,4 +100,4 @@ function ConstituentaToolbar({
); );
} }
export default ConstituentaToolbar; export default ToolbarConstituenta;

View File

@ -21,10 +21,10 @@ import { TokenID } from '@/models/rslang';
import { storage } from '@/utils/constants'; import { storage } from '@/utils/constants';
import { errors, labelTypification } from '@/utils/labels'; import { errors, labelTypification } from '@/utils/labels';
import ExpressionToolbar from './ExpressionToolbar';
import ParsingResult from './ParsingResult'; import ParsingResult from './ParsingResult';
import RSEditorControls from './RSEditControls'; import RSEditorControls from './RSEditControls';
import StatusBar from './StatusBar'; import StatusBar from './StatusBar';
import ToolbarRSExpression from './ToolbarRSExpression';
interface EditorRSExpressionProps { interface EditorRSExpressionProps {
id?: string; id?: string;
@ -161,7 +161,7 @@ function EditorRSExpression({
) : null} ) : null}
</AnimatePresence> </AnimatePresence>
<ExpressionToolbar <ToolbarRSExpression
disabled={disabled} disabled={disabled}
showControls={showControls} showControls={showControls}
showAST={handleShowAST} showAST={handleShowAST}

View File

@ -6,7 +6,7 @@ import { useMemo } from 'react';
import { StatusIcon } from '@/components/DomainIcons'; import { StatusIcon } from '@/components/DomainIcons';
import Loader from '@/components/ui/Loader'; import Loader from '@/components/ui/Loader';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ExpressionStatus } from '@/models/rsform'; import { ExpressionStatus } from '@/models/rsform';
import { type IConstituenta } from '@/models/rsform'; import { type IConstituenta } from '@/models/rsform';
import { inferStatus } from '@/models/rsformAPI'; import { inferStatus } from '@/models/rsformAPI';

View File

@ -1,10 +1,10 @@
import { IconControls, IconText, IconTextOff, IconTree } from '@/components/Icons'; import { IconControls, IconText, IconTextOff, IconTree } from '@/components/Icons';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import Overlay from '@/components/ui/Overlay'; import Overlay from '@/components/ui/Overlay';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useRSForm } from '@/context/RSFormContext'; import { useRSForm } from '@/context/RSFormContext';
interface ExpressionToolbarProps { interface ToolbarRSExpressionProps {
disabled?: boolean; disabled?: boolean;
showControls: boolean; showControls: boolean;
@ -12,7 +12,7 @@ interface ExpressionToolbarProps {
showAST: () => void; showAST: () => void;
} }
function ExpressionToolbar({ disabled, showControls, toggleControls, showAST }: ExpressionToolbarProps) { function ToolbarRSExpression({ disabled, showControls, toggleControls, showAST }: ToolbarRSExpressionProps) {
const model = useRSForm(); const model = useRSForm();
const { mathFont, setMathFont } = useConceptOptions(); const { mathFont, setMathFont } = useConceptOptions();
@ -45,4 +45,4 @@ function ExpressionToolbar({ disabled, showControls, toggleControls, showAST }:
); );
} }
export default ExpressionToolbar; export default ToolbarRSExpression;

View File

@ -12,7 +12,7 @@ import { useRSEdit } from '../RSEditContext';
import EditorLibraryItem from './EditorLibraryItem'; import EditorLibraryItem from './EditorLibraryItem';
import FormRSForm from './FormRSForm'; import FormRSForm from './FormRSForm';
import RSFormStats from './RSFormStats'; import RSFormStats from './RSFormStats';
import RSFormToolbar from './RSFormToolbar'; import ToolbarRSFormCard from './ToolbarRSFormCard';
interface EditorRSFormCardProps { interface EditorRSFormCardProps {
isModified: boolean; isModified: boolean;
@ -43,7 +43,7 @@ function EditorRSFormCard({ isModified, onDestroy, setIsModified }: EditorRSForm
return ( return (
<> <>
<RSFormToolbar <ToolbarRSFormCard
subscribed={isSubscribed} subscribed={isSubscribed}
modified={isModified} modified={isModified}
anonymous={!user} anonymous={!user}

View File

@ -16,8 +16,8 @@ import { limits, patterns } from '@/utils/constants';
import { information } from '@/utils/labels'; import { information } from '@/utils/labels';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
import AccessToolbar from './AccessToolbar'; import ToolbarItemAccess from './ToolbarItemAccess';
import VersionsToolbar from './VersionsToolbar'; import ToolbarVersioning from './ToolbarVersioning';
interface FormRSFormProps { interface FormRSFormProps {
id?: string; id?: string;
@ -112,8 +112,8 @@ function FormRSForm({ id, isModified, setIsModified }: FormRSFormProps) {
onChange={event => setAlias(event.target.value)} onChange={event => setAlias(event.target.value)}
/> />
<div className='flex flex-col'> <div className='flex flex-col'>
<VersionsToolbar /> <ToolbarVersioning />
<AccessToolbar <ToolbarItemAccess
visible={visible} visible={visible}
toggleVisible={() => setVisible(prev => !prev)} toggleVisible={() => setVisible(prev => !prev)}
readOnly={readOnly} readOnly={readOnly}

View File

@ -13,7 +13,7 @@ import { HelpTopic } from '@/models/miscellaneous';
import { UserLevel } from '@/models/user'; import { UserLevel } from '@/models/user';
import { PARAMETER } from '@/utils/constants'; import { PARAMETER } from '@/utils/constants';
interface AccessToolbarProps { interface ToolbarItemAccessProps {
visible: boolean; visible: boolean;
toggleVisible: () => void; toggleVisible: () => void;
readOnly: boolean; readOnly: boolean;
@ -21,7 +21,7 @@ interface AccessToolbarProps {
controller: ILibraryItemEditor; controller: ILibraryItemEditor;
} }
function AccessToolbar({ visible, toggleVisible, readOnly, toggleReadOnly, controller }: AccessToolbarProps) { function ToolbarItemAccess({ visible, toggleVisible, readOnly, toggleReadOnly, controller }: ToolbarItemAccessProps) {
const { accessLevel } = useAccessMode(); const { accessLevel } = useAccessMode();
const policy = useMemo( const policy = useMemo(
() => controller.schema?.access_policy ?? AccessPolicy.PRIVATE, () => controller.schema?.access_policy ?? AccessPolicy.PRIVATE,
@ -64,4 +64,4 @@ function AccessToolbar({ visible, toggleVisible, readOnly, toggleReadOnly, contr
); );
} }
export default AccessToolbar; export default ToolbarItemAccess;

View File

@ -16,7 +16,7 @@ import { prepareTooltip, tooltips } from '@/utils/labels';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
interface RSFormToolbarProps { interface ToolbarRSFormCardProps {
modified: boolean; modified: boolean;
subscribed: boolean; subscribed: boolean;
anonymous: boolean; anonymous: boolean;
@ -24,7 +24,7 @@ interface RSFormToolbarProps {
onDestroy: () => void; onDestroy: () => void;
} }
function RSFormToolbar({ modified, anonymous, subscribed, onSubmit, onDestroy }: RSFormToolbarProps) { function ToolbarRSFormCard({ modified, anonymous, subscribed, onSubmit, onDestroy }: ToolbarRSFormCardProps) {
const controller = useRSEdit(); const controller = useRSEdit();
const { accessLevel } = useAccessMode(); const { accessLevel } = useAccessMode();
const canSave = useMemo(() => modified && !controller.isProcessing, [modified, controller.isProcessing]); const canSave = useMemo(() => modified && !controller.isProcessing, [modified, controller.isProcessing]);
@ -65,4 +65,4 @@ function RSFormToolbar({ modified, anonymous, subscribed, onSubmit, onDestroy }:
); );
} }
export default RSFormToolbar; export default ToolbarRSFormCard;

View File

@ -7,10 +7,10 @@ import { PARAMETER } from '@/utils/constants';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
function VersionsToolbar() { function ToolbarVersioning() {
const controller = useRSEdit(); const controller = useRSEdit();
return ( return (
<Overlay position='top-[-0.4rem] right-[0rem]' className='cc-icons pr-2'> <Overlay position='top-[-0.4rem] right-[0rem]' className='pr-2 cc-icons'>
{controller.isMutable ? ( {controller.isMutable ? (
<> <>
<MiniButton <MiniButton
@ -40,4 +40,4 @@ function VersionsToolbar() {
); );
} }
export default VersionsToolbar; export default ToolbarVersioning;

View File

@ -6,12 +6,12 @@ import { useLayoutEffect, useMemo, useState } from 'react';
import SelectedCounter from '@/components/info/SelectedCounter'; import SelectedCounter from '@/components/info/SelectedCounter';
import { type RowSelectionState } from '@/components/ui/DataTable'; import { type RowSelectionState } from '@/components/ui/DataTable';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ConstituentaID, CstType } from '@/models/rsform'; import { ConstituentaID, CstType } from '@/models/rsform';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
import RSListToolbar from './RSListToolbar'; import TableRSList from './TableRSList';
import RSTable from './RSTable'; import ToolbarRSList from './ToolbarRSList';
interface EditorRSListProps { interface EditorRSListProps {
onOpenEdit: (cstID: ConstituentaID) => void; onOpenEdit: (cstID: ConstituentaID) => void;
@ -104,7 +104,7 @@ function EditorRSList({ onOpenEdit }: EditorRSListProps) {
return ( return (
<> <>
{controller.isContentEditable ? <RSListToolbar /> : null} {controller.isContentEditable ? <ToolbarRSList /> : null}
<AnimateFade tabIndex={-1} onKeyDown={handleKeyDown}> <AnimateFade tabIndex={-1} onKeyDown={handleKeyDown}>
{controller.isContentEditable ? ( {controller.isContentEditable ? (
<SelectedCounter <SelectedCounter
@ -121,7 +121,7 @@ function EditorRSList({ onOpenEdit }: EditorRSListProps) {
})} })}
/> />
<RSTable <TableRSList
items={controller.schema?.items} items={controller.schema?.items}
maxHeight={tableHeight} maxHeight={tableHeight}
enableSelection={controller.isContentEditable} enableSelection={controller.isContentEditable}

View File

@ -8,13 +8,13 @@ import { CProps } from '@/components/props';
import DataTable, { createColumnHelper, RowSelectionState, VisibilityState } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, RowSelectionState, VisibilityState } from '@/components/ui/DataTable';
import NoData from '@/components/ui/NoData'; import NoData from '@/components/ui/NoData';
import TextURL from '@/components/ui/TextURL'; import TextURL from '@/components/ui/TextURL';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { ConstituentaID, IConstituenta } from '@/models/rsform'; import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { prefixes } from '@/utils/constants'; import { prefixes } from '@/utils/constants';
import { labelCstTypification } from '@/utils/labels'; import { labelCstTypification } from '@/utils/labels';
interface RSTableProps { interface TableRSListProps {
items?: IConstituenta[]; items?: IConstituenta[];
enableSelection: boolean; enableSelection: boolean;
maxHeight?: string; maxHeight?: string;
@ -32,7 +32,15 @@ const COLUMN_CONVENTION_HIDE_THRESHOLD = 1800;
const columnHelper = createColumnHelper<IConstituenta>(); const columnHelper = createColumnHelper<IConstituenta>();
function RSTable({ items, maxHeight, enableSelection, selected, setSelected, onEdit, onCreateNew }: RSTableProps) { function TableRSList({
items,
maxHeight,
enableSelection,
selected,
setSelected,
onEdit,
onCreateNew
}: TableRSListProps) {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
const windowSize = useWindowSize(); const windowSize = useWindowSize();
@ -147,4 +155,4 @@ function RSTable({ items, maxHeight, enableSelection, selected, setSelected, onE
); );
} }
export default RSTable; export default TableRSList;

View File

@ -21,7 +21,7 @@ import { getCstTypeShortcut, labelCstType, prepareTooltip } from '@/utils/labels
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
function RSListToolbar() { function ToolbarRSList() {
const controller = useRSEdit(); const controller = useRSEdit();
const insertMenu = useDropdown(); const insertMenu = useDropdown();
@ -87,4 +87,4 @@ function RSListToolbar() {
); );
} }
export default RSListToolbar; export default ToolbarRSList;

View File

@ -8,11 +8,11 @@ import { useDebounce } from 'use-debounce';
import InfoConstituenta from '@/components/info/InfoConstituenta'; import InfoConstituenta from '@/components/info/InfoConstituenta';
import SelectedCounter from '@/components/info/SelectedCounter'; import SelectedCounter from '@/components/info/SelectedCounter';
import GraphSelectionToolbar from '@/components/select/GraphSelectionToolbar'; import ToolbarGraphSelection from '@/components/select/ToolbarGraphSelection';
import { GraphCanvasRef, GraphEdge, GraphLayout, GraphNode } from '@/components/ui/GraphUI'; import { GraphCanvasRef, GraphEdge, GraphLayout, GraphNode } from '@/components/ui/GraphUI';
import Overlay from '@/components/ui/Overlay'; import Overlay from '@/components/ui/Overlay';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import DlgGraphParams from '@/dialogs/DlgGraphParams'; import DlgGraphParams from '@/dialogs/DlgGraphParams';
import useLocalStorage from '@/hooks/useLocalStorage'; import useLocalStorage from '@/hooks/useLocalStorage';
import { GraphColoring, GraphFilterParams, GraphSizing } from '@/models/miscellaneous'; import { GraphColoring, GraphFilterParams, GraphSizing } from '@/models/miscellaneous';
@ -24,10 +24,10 @@ import { PARAMETER, storage } from '@/utils/constants';
import { convertBase64ToBlob } from '@/utils/utils'; import { convertBase64ToBlob } from '@/utils/utils';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
import FocusToolbar from './FocusToolbar';
import GraphSelectors from './GraphSelectors'; import GraphSelectors from './GraphSelectors';
import GraphToolbar from './GraphToolbar';
import TermGraph from './TermGraph'; import TermGraph from './TermGraph';
import ToolbarFocusedCst from './ToolbarFocusedCst';
import ToolbarTermGraph from './ToolbarTermGraph';
import useGraphFilter from './useGraphFilter'; import useGraphFilter from './useGraphFilter';
import ViewHidden from './ViewHidden'; import ViewHidden from './ViewHidden';
@ -303,7 +303,7 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
position='top-0 pt-1 right-1/2 translate-x-1/2' position='top-0 pt-1 right-1/2 translate-x-1/2'
className='flex flex-col items-center rounded-b-2xl cc-blur' className='flex flex-col items-center rounded-b-2xl cc-blur'
> >
<GraphToolbar <ToolbarTermGraph
is3D={is3D} is3D={is3D}
orbit={orbit} orbit={orbit}
noText={filterParams.noText} noText={filterParams.noText}
@ -323,7 +323,7 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
} }
/> />
{!focusCst ? ( {!focusCst ? (
<GraphSelectionToolbar <ToolbarGraphSelection
graph={controller.schema!.graph} graph={controller.schema!.graph}
core={controller.schema!.items.filter(cst => isBasicConcept(cst.cst_type)).map(cst => cst.id)} core={controller.schema!.items.filter(cst => isBasicConcept(cst.cst_type)).map(cst => cst.id)}
setSelected={controller.setSelected} setSelected={controller.setSelected}
@ -331,7 +331,7 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
/> />
) : null} ) : null}
{focusCst ? ( {focusCst ? (
<FocusToolbar <ToolbarFocusedCst
center={focusCst} center={focusCst}
reset={() => handleSetFocus(undefined)} reset={() => handleSetFocus(undefined)}
showInputs={filterParams.focusShowInputs} showInputs={filterParams.focusShowInputs}

View File

@ -12,7 +12,7 @@ import GraphUI, {
GraphPointerEvent, GraphPointerEvent,
useSelection useSelection
} from '@/components/ui/GraphUI'; } from '@/components/ui/GraphUI';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { ConstituentaID } from '@/models/rsform'; import { ConstituentaID } from '@/models/rsform';
import { graphDarkT, graphLightT } from '@/styling/color'; import { graphDarkT, graphLightT } from '@/styling/color';
import { PARAMETER, resources } from '@/utils/constants'; import { PARAMETER, resources } from '@/utils/constants';

View File

@ -4,12 +4,12 @@ import { useCallback } from 'react';
import { IconGraphInputs, IconGraphOutputs, IconReset } from '@/components/Icons'; import { IconGraphInputs, IconGraphOutputs, IconReset } from '@/components/Icons';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { IConstituenta } from '@/models/rsform'; import { IConstituenta } from '@/models/rsform';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
interface FocusToolbarProps { interface ToolbarFocusedCstProps {
center: IConstituenta; center: IConstituenta;
showInputs: boolean; showInputs: boolean;
showOutputs: boolean; showOutputs: boolean;
@ -19,14 +19,14 @@ interface FocusToolbarProps {
toggleShowOutputs: () => void; toggleShowOutputs: () => void;
} }
function FocusToolbar({ function ToolbarFocusedCst({
center, center,
reset, reset,
showInputs, showInputs,
showOutputs, showOutputs,
toggleShowInputs, toggleShowInputs,
toggleShowOutputs toggleShowOutputs
}: FocusToolbarProps) { }: ToolbarFocusedCstProps) {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
const controller = useRSEdit(); const controller = useRSEdit();
@ -60,4 +60,4 @@ function FocusToolbar({
); );
} }
export default FocusToolbar; export default ToolbarFocusedCst;

View File

@ -19,7 +19,7 @@ import { PARAMETER } from '@/utils/constants';
import { useRSEdit } from '../RSEditContext'; import { useRSEdit } from '../RSEditContext';
interface GraphToolbarProps { interface ToolbarTermGraphProps {
is3D: boolean; is3D: boolean;
orbit: boolean; orbit: boolean;
@ -37,7 +37,7 @@ interface GraphToolbarProps {
toggleOrbit: () => void; toggleOrbit: () => void;
} }
function GraphToolbar({ function ToolbarTermGraph({
is3D, is3D,
noText, noText,
foldDerived, foldDerived,
@ -50,7 +50,7 @@ function GraphToolbar({
onDelete, onDelete,
onResetViewpoint, onResetViewpoint,
onSaveImage onSaveImage
}: GraphToolbarProps) { }: ToolbarTermGraphProps) {
const controller = useRSEdit(); const controller = useRSEdit();
return ( return (
@ -123,4 +123,4 @@ function GraphToolbar({
); );
} }
export default GraphToolbar; export default ToolbarTermGraph;

View File

@ -5,11 +5,11 @@ import { motion } from 'framer-motion';
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import { IconDropArrow, IconDropArrowUp } from '@/components/Icons'; import { IconDropArrow, IconDropArrowUp } from '@/components/Icons';
import ConstituentaTooltip from '@/components/info/ConstituentaTooltip'; import TooltipConstituenta from '@/components/info/TooltipConstituenta';
import { CProps } from '@/components/props'; import { CProps } from '@/components/props';
import MiniButton from '@/components/ui/MiniButton'; import MiniButton from '@/components/ui/MiniButton';
import Overlay from '@/components/ui/Overlay'; import Overlay from '@/components/ui/Overlay';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useLocalStorage from '@/hooks/useLocalStorage'; import useLocalStorage from '@/hooks/useLocalStorage';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { GraphColoring } from '@/models/miscellaneous'; import { GraphColoring } from '@/models/miscellaneous';
@ -112,7 +112,7 @@ function ViewHidden({ items, selected, toggleSelection, setFocus, schema, colori
> >
{cst.alias} {cst.alias}
</button> </button>
<ConstituentaTooltip data={cst} anchor={`#${id}`} /> <TooltipConstituenta data={cst} anchor={`#${id}`} />
</div> </div>
); );
})} })}

View File

@ -38,11 +38,11 @@ import { describeAccessMode, labelAccessMode, tooltips } from '@/utils/labels';
import { useRSEdit } from './RSEditContext'; import { useRSEdit } from './RSEditContext';
interface RSTabsMenuProps { interface MenuRSTabsProps {
onDestroy: () => void; onDestroy: () => void;
} }
function RSTabsMenu({ onDestroy }: RSTabsMenuProps) { function MenuRSTabs({ onDestroy }: MenuRSTabsProps) {
const controller = useRSEdit(); const controller = useRSEdit();
const router = useConceptNavigation(); const router = useConceptNavigation();
const { user } = useAuth(); const { user } = useAuth();
@ -334,4 +334,4 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
); );
} }
export default RSTabsMenu; export default MenuRSTabs;

View File

@ -9,7 +9,7 @@ import { urls } from '@/app/urls';
import { useAccessMode } from '@/context/AccessModeContext'; import { useAccessMode } from '@/context/AccessModeContext';
import { useAuth } from '@/context/AuthContext'; import { useAuth } from '@/context/AuthContext';
import { useConceptNavigation } from '@/context/NavigationContext'; import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useRSForm } from '@/context/RSFormContext'; import { useRSForm } from '@/context/RSFormContext';
import DlgChangeLocation from '@/dialogs/DlgChangeLocation'; import DlgChangeLocation from '@/dialogs/DlgChangeLocation';
import DlgCloneLibraryItem from '@/dialogs/DlgCloneLibraryItem'; import DlgCloneLibraryItem from '@/dialogs/DlgCloneLibraryItem';

View File

@ -13,9 +13,9 @@ import Loader from '@/components/ui/Loader';
import TabLabel from '@/components/ui/TabLabel'; import TabLabel from '@/components/ui/TabLabel';
import TextURL from '@/components/ui/TextURL'; import TextURL from '@/components/ui/TextURL';
import AnimateFade from '@/components/wrap/AnimateFade'; import AnimateFade from '@/components/wrap/AnimateFade';
import { useConceptOptions } from '@/context/ConceptOptionsContext';
import { useLibrary } from '@/context/LibraryContext'; import { useLibrary } from '@/context/LibraryContext';
import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext'; import { useBlockNavigation, useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import { useRSForm } from '@/context/RSFormContext'; import { useRSForm } from '@/context/RSFormContext';
import useQueryStrings from '@/hooks/useQueryStrings'; import useQueryStrings from '@/hooks/useQueryStrings';
import { ConstituentaID, IConstituenta, IConstituentaMeta } from '@/models/rsform'; import { ConstituentaID, IConstituenta, IConstituentaMeta } from '@/models/rsform';
@ -26,8 +26,8 @@ import EditorConstituenta from './EditorConstituenta';
import EditorRSForm from './EditorRSFormCard'; import EditorRSForm from './EditorRSFormCard';
import EditorRSList from './EditorRSList'; import EditorRSList from './EditorRSList';
import EditorTermGraph from './EditorTermGraph'; import EditorTermGraph from './EditorTermGraph';
import MenuRSTabs from './MenuRSTabs';
import { RSEditState } from './RSEditContext'; import { RSEditState } from './RSEditContext';
import RSTabsMenu from './RSTabsMenu';
export enum RSTabID { export enum RSTabID {
CARD = 0, CARD = 0,
@ -249,7 +249,7 @@ function RSTabs() {
className='flex flex-col mx-auto min-w-fit' className='flex flex-col mx-auto min-w-fit'
> >
<TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}> <TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}>
<RSTabsMenu onDestroy={onDestroySchema} /> <MenuRSTabs onDestroy={onDestroySchema} />
<TabLabel <TabLabel
label='Карточка' label='Карточка'

View File

@ -5,14 +5,14 @@ import { useCallback, useLayoutEffect, useMemo, useState } from 'react';
import BadgeConstituenta from '@/components/info/BadgeConstituenta'; import BadgeConstituenta from '@/components/info/BadgeConstituenta';
import DataTable, { createColumnHelper, IConditionalStyle, VisibilityState } from '@/components/ui/DataTable'; import DataTable, { createColumnHelper, IConditionalStyle, VisibilityState } from '@/components/ui/DataTable';
import NoData from '@/components/ui/NoData'; import NoData from '@/components/ui/NoData';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { ConstituentaID, IConstituenta } from '@/models/rsform'; import { ConstituentaID, IConstituenta } from '@/models/rsform';
import { isMockCst } from '@/models/rsformAPI'; import { isMockCst } from '@/models/rsformAPI';
import { PARAMETER, prefixes } from '@/utils/constants'; import { PARAMETER, prefixes } from '@/utils/constants';
import { describeConstituenta } from '@/utils/labels'; import { describeConstituenta } from '@/utils/labels';
interface ConstituentsTableProps { interface TableSideConstituentsProps {
items: IConstituenta[]; items: IConstituenta[];
activeCst?: IConstituenta; activeCst?: IConstituenta;
onOpenEdit: (cstID: ConstituentaID) => void; onOpenEdit: (cstID: ConstituentaID) => void;
@ -22,7 +22,13 @@ interface ConstituentsTableProps {
const columnHelper = createColumnHelper<IConstituenta>(); const columnHelper = createColumnHelper<IConstituenta>();
function ConstituentsTable({ items, activeCst, onOpenEdit, maxHeight, denseThreshold = 9999 }: ConstituentsTableProps) { function TableSideConstituents({
items,
activeCst,
onOpenEdit,
maxHeight,
denseThreshold = 9999
}: TableSideConstituentsProps) {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
const windowSize = useWindowSize(); const windowSize = useWindowSize();
@ -165,4 +171,4 @@ function ConstituentsTable({ items, activeCst, onOpenEdit, maxHeight, denseThres
); );
} }
export default ConstituentsTable; export default TableSideConstituents;

View File

@ -5,14 +5,14 @@ import { motion } from 'framer-motion';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { useAccessMode } from '@/context/AccessModeContext'; import { useAccessMode } from '@/context/AccessModeContext';
import { useConceptOptions } from '@/context/OptionsContext'; import { useConceptOptions } from '@/context/ConceptOptionsContext';
import useWindowSize from '@/hooks/useWindowSize'; import useWindowSize from '@/hooks/useWindowSize';
import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform';
import { UserLevel } from '@/models/user'; import { UserLevel } from '@/models/user';
import { animateSideView } from '@/styling/animations'; import { animateSideView } from '@/styling/animations';
import ConstituentsSearch from './ConstituentsSearch'; import ConstituentsSearch from './ConstituentsSearch';
import ConstituentsTable from './ConstituentsTable'; import TableSideConstituents from './TableSideConstituents';
// Window width cutoff for expression show // Window width cutoff for expression show
const COLUMN_EXPRESSION_HIDE_THRESHOLD = 1500; const COLUMN_EXPRESSION_HIDE_THRESHOLD = 1500;
@ -37,7 +37,7 @@ function ViewConstituents({ expression, schema, activeCst, isBottom, onOpenEdit
const table = useMemo( const table = useMemo(
() => ( () => (
<ConstituentsTable <TableSideConstituents
maxHeight={ maxHeight={
isBottom isBottom
? calculateHeight(accessLevel !== UserLevel.READER ? '42rem' : '35rem', '10rem') ? calculateHeight(accessLevel !== UserLevel.READER ? '42rem' : '35rem', '10rem')

View File

@ -11,13 +11,13 @@ import { useConceptNavigation } from '@/context/NavigationContext';
import { ILibraryItem } from '@/models/library'; import { ILibraryItem } from '@/models/library';
import { animateSideView } from '@/styling/animations'; import { animateSideView } from '@/styling/animations';
interface ViewSubscriptionsProps { interface TableSubscriptionsProps {
items: ILibraryItem[]; items: ILibraryItem[];
} }
const columnHelper = createColumnHelper<ILibraryItem>(); const columnHelper = createColumnHelper<ILibraryItem>();
function ViewSubscriptions({ items }: ViewSubscriptionsProps) { function TableSubscriptions({ items }: TableSubscriptionsProps) {
const router = useConceptNavigation(); const router = useConceptNavigation();
const intl = useIntl(); const intl = useIntl();
@ -82,4 +82,4 @@ function ViewSubscriptions({ items }: ViewSubscriptionsProps) {
); );
} }
export default ViewSubscriptions; export default TableSubscriptions;

View File

@ -14,9 +14,9 @@ import { useUserProfile } from '@/context/UserProfileContext';
import EditorPassword from './EditorPassword'; import EditorPassword from './EditorPassword';
import EditorProfile from './EditorProfile'; import EditorProfile from './EditorProfile';
import ViewSubscriptions from './ViewSubscriptions'; import TableSubscriptions from './TableSubscriptions';
function UserTabs() { function UserContents() {
const { user, error, loading } = useUserProfile(); const { user, error, loading } = useUserProfile();
const { user: auth } = useAuth(); const { user: auth } = useAuth();
const { items } = useLibrary(); const { items } = useLibrary();
@ -50,11 +50,11 @@ function UserTabs() {
</div> </div>
</div> </div>
<AnimatePresence> <AnimatePresence>
{subscriptions.length > 0 && showSubs ? <ViewSubscriptions items={subscriptions} /> : null} {subscriptions.length > 0 && showSubs ? <TableSubscriptions items={subscriptions} /> : null}
</AnimatePresence> </AnimatePresence>
</AnimateFade> </AnimateFade>
</DataLoader> </DataLoader>
); );
} }
export default UserTabs; export default UserContents;

View File

@ -1,13 +1,13 @@
import RequireAuth from '@/components/wrap/RequireAuth'; import RequireAuth from '@/components/wrap/RequireAuth';
import { UserProfileState } from '@/context/UserProfileContext'; import { UserProfileState } from '@/context/UserProfileContext';
import UserTabs from './UserTabs'; import UserContents from './UserContents';
function UserProfilePage() { function UserProfilePage() {
return ( return (
<RequireAuth> <RequireAuth>
<UserProfileState> <UserProfileState>
<UserTabs /> <UserContents />
</UserProfileState> </UserProfileState>
</RequireAuth> </RequireAuth>
); );