import {observer} from "mobx-react"; import {Page} from "../layout/Page"; import {action, makeObservable, observable, reaction, runInAction} from "mobx"; import React from "react"; import {DataTable} from "../data-tables/DataTable"; import {Column, TableDescriptor} from "../../utils/tables"; import {PreparationDirection} from "../../models/preparationDirection"; import {get} from "../../utils/request"; import {datetimeConverter} from "../../utils/converters"; import {Button, Col, Row} from "react-bootstrap"; import {ModalState} from "../../utils/modalState"; import {UserService} from "../../services/UserService"; import {DiplomaTopic} from "../../models/diplomaTopic"; import {TeacherData} from "../../models/teacherData"; import {fullName} from "../../models/participant"; import DiplomaTopicModal from "./DiplomaTopicModal"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import _ from "lodash"; import {ThinkService} from "../../services/ThinkService"; import {DiplomaTopicFilterModal} from "./DiplomaTopicFilterModal"; const getAllDiplomaTopics = () => { return get("diploma-topic/all"); } class DiplomaTopicPageState { constructor() { makeObservable(this); this.updateDiplomaTopics(); reaction(() => this.diplomaTopics, () => { this.tableDescriptor = new TableDescriptor([ new Column('name', 'Название', undefined, (dp) => { return ; }), new Column('teacher', 'Преподаватель', (value) => { return value ? fullName(value.participant) : "Не указан"; }), new Column('preparationDirection', 'Код направления подготовки', value => { return value ? value.code : "Не указано"; }), new Column('preparationDirection', 'Название Направления подготовки', value => { return value ? value.name : "Не указано"; }), new Column('createdAt', 'Дата создания', datetimeConverter), new Column('updatedAt', 'Дата обновления', datetimeConverter), ], this.diplomaTopics, true, this.filters ); }, {fireImmediately: true}); } @observable diplomaTopics: DiplomaTopic[] = []; @observable selectedTopic: DiplomaTopic = undefined; @observable tableDescriptor: TableDescriptor; @observable diplomaTopicModalState = new ModalState(false, this.updateDiplomaTopics); @observable diplomaTopicEditModalState = new ModalState(false, this.updateDiplomaTopics); @observable filters: ((group: DiplomaTopic) => boolean)[] = []; @observable filterModalState = new ModalState(); @action.bound updateDiplomaTopics() { ThinkService.think(); getAllDiplomaTopics().then(dt => { runInAction(() => { this.diplomaTopics = dt; }) }).finally(() => { ThinkService.completeAll(); }); } @action.bound onIconClicked(event: React.MouseEvent) { const pd = this.diplomaTopics.find(pd => pd.id === _.toNumber(event.currentTarget.getAttribute('data-value'))); if (pd) { this.selectedTopic = pd; this.diplomaTopicEditModalState.open(); } } } @observer export class DiplomaTopicListPage extends Page { constructor(props: any) { super(props); makeObservable(this); this.fields = new DiplomaTopicPageState(); } @observable fields: DiplomaTopicPageState; get page() { return <> { <> { this.fields.tableDescriptor && <> } filterModalState={this.fields.filterModalState} /> } { this.fields.selectedTopic && } } } } const AdditionalButtons = observer(({state}: {state: DiplomaTopicPageState}) => { return (
{(UserService.isSecretary || UserService.isAdministrator) && ( )}
); });