import { Dispatch, useEffect, useMemo, useState } from 'react'; import ConceptSearch from '../../components/Common/ConceptSearch'; import SelectSingle from '../../components/Common/SelectSingle'; import TextArea from '../../components/Common/TextArea'; import DataTable, { createColumnHelper,IConditionalStyle } from '../../components/DataTable'; import ConstituentaTooltip from '../../components/Help/ConstituentaTooltip'; import RSInput from '../../components/RSInput'; import { useLibrary } from '../../context/LibraryContext'; import { useConceptTheme } from '../../context/ThemeContext'; import { CstMatchMode } from '../../models/miscelanious'; import { applyFilterCategory, CATEGORY_CST_TYPE, IConstituenta, IRSForm, matchConstituenta } from '../../models/rsform'; import { colorfgCstStatus } from '../../utils/color'; import { prefixes } from '../../utils/constants'; export interface ITemplateState { templateID?: number prototype?: IConstituenta filterCategory?: IConstituenta filterText: string } interface TemplateTabProps { state: ITemplateState partialUpdate: Dispatch> } const constituentaHelper = createColumnHelper(); function TemplateTab({ state, partialUpdate }: TemplateTabProps) { const { colors } = useConceptTheme(); const { templates, retrieveTemplate } = useLibrary(); const [ selectedSchema, setSelectedSchema ] = useState(undefined); const [filteredData, setFilteredData] = useState([]); const prototypeInfo = useMemo( () => { if (!state.prototype) { return ''; } else { return `${state.prototype?.term_raw}${state.prototype?.definition_raw ? ` — ${state.prototype?.definition_raw}` : ''}`; } }, [state.prototype]); const templateSelector = useMemo( () => templates.map( (template) => ({ value: template.id, label: template.title }) ), [templates]); const categorySelector = useMemo( (): {value: number, label: string}[] => { if (!selectedSchema) { return []; } return selectedSchema.items .filter(cst => cst.cst_type === CATEGORY_CST_TYPE) .map(cst => ({ value: cst.id, label: cst.term_raw })); }, [selectedSchema]); useEffect( () => { if (templates.length > 0 && !state.templateID) { partialUpdate({ templateID: templates[0].id }); } }, [templates, state.templateID, partialUpdate]); useEffect( () => { if (!state.templateID) { setSelectedSchema(undefined); } else { retrieveTemplate(state.templateID, setSelectedSchema); } }, [state.templateID, retrieveTemplate]); // Filter constituents useEffect( () => { if (!selectedSchema) { return; } let data = selectedSchema.items; if (state.filterCategory) { data = applyFilterCategory(state.filterCategory, selectedSchema); } if (state.filterText) { data = data.filter(cst => matchConstituenta(state.filterText, cst, CstMatchMode.TERM)); } setFilteredData(data); }, [state.filterText, state.filterCategory, selectedSchema]); function handleSelectTemplate(cst: IConstituenta) { partialUpdate( { prototype: cst } ); } const columns = useMemo( () => [ constituentaHelper.accessor('alias', { id: 'alias', size: 65, minSize: 65, cell: props => { const cst = props.row.original; return (<>
{cst.alias}
); } }), constituentaHelper.accessor('term_resolved', { id: 'term', size: 600, minSize: 350, maxSize: 600 }) ], [colors]); const conditionalRowStyles = useMemo( (): IConditionalStyle[] => [ { when: (cst: IConstituenta) => cst.id === state.prototype?.id, style: { backgroundColor: colors.bgSelected }, } ], [state.prototype, colors]); return (
partialUpdate({filterCategory: selectedSchema?.items.find(cst => cst.id === data?.value) })} isClearable /> item.id == state.templateID)!.title }: null} onChange={data => partialUpdate({templateID: (data ? data.value : undefined)})} />
partialUpdate({ filterText: newValue} )} dense />

Список конституент пуст

Измените параметры фильтра

} onRowClicked={handleSelectTemplate} />