Refactoring: UI elements naming convention
Some checks are pending
Frontend CI / build (18.x) (push) Waiting to run
Some checks are pending
Frontend CI / build (18.x) (push) Waiting to run
This commit is contained in:
parent
74f1c4ef0e
commit
6c3461977d
|
@ -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() {
|
||||||
|
|
|
@ -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'> {}
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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`,
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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[];
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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[];
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
@ -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]
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
|
|
@ -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[];
|
|
||||||
}
|
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useConceptOptions } from '@/context/OptionsContext';
|
import { useConceptOptions } from '@/context/ConceptOptionsContext';
|
||||||
|
|
||||||
function HelpFormulaTree() {
|
function HelpFormulaTree() {
|
||||||
const { colors } = useConceptOptions();
|
const { colors } = useConceptOptions();
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
|
@ -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='Граф' />
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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}
|
||||||
|
|
|
@ -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';
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -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;
|
|
@ -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';
|
||||||
|
|
|
@ -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='Карточка'
|
||||||
|
|
|
@ -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;
|
|
@ -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')
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user