diff --git a/backend/project/api/events/migrations/0002_event_description_event_end_date_event_is_online_and_more.py b/backend/project/api/events/migrations/0002_event_description_event_end_date_event_is_online_and_more.py new file mode 100644 index 0000000..9992f4b --- /dev/null +++ b/backend/project/api/events/migrations/0002_event_description_event_end_date_event_is_online_and_more.py @@ -0,0 +1,52 @@ +# Generated by Django 4.2.11 on 2024-04-02 11:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("events", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="event", + name="description", + field=models.TextField(default=""), + ), + migrations.AddField( + model_name="event", + name="end_date", + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name="event", + name="is_online", + field=models.BooleanField(default=True, verbose_name="оффлайн или онлайн"), + ), + migrations.AddField( + model_name="event", + name="limitation", + field=models.CharField( + choices=[ + ("Everyone", "everyone"), + ("School", "school"), + ("Student", "student"), + ("Professional", "professional"), + ], + default="everyone", + max_length=64, + ), + ), + migrations.AddField( + model_name="event", + name="location", + field=models.CharField(default="", max_length=512), + ), + migrations.AddField( + model_name="event", + name="start_date", + field=models.DateField(blank=True, null=True), + ), + ] diff --git a/backend/project/api/events/models.py b/backend/project/api/events/models.py index ed10a3c..3684e65 100644 --- a/backend/project/api/events/models.py +++ b/backend/project/api/events/models.py @@ -4,12 +4,52 @@ from api.core.models import BaseModel class Event(BaseModel): - title = models.CharField(max_length=255) + LIMITATIONS = ( + ("Everyone", "everyone"), + ("School", "school"), + ("Student", "student"), + ("Professional", "professional"), + ) + + title = models.CharField( + max_length=255, + ) + users = models.ManyToManyField( "users.User", related_name="events", blank=True, ) + start_date = models.DateField( + null=True, + blank=True, + ) + + end_date = models.DateField( + null=True, + blank=True, + ) + + description = models.TextField( + default="", + ) + + is_online = models.BooleanField( + default=True, + verbose_name="оффлайн или онлайн", + ) + + location = models.CharField( + max_length=512, + default="", + ) + + limitation = models.CharField( + max_length=64, + choices=LIMITATIONS, + default="everyone", + ) + def __str__(self): return self.title diff --git a/frontend/package-lock.json b/frontend/package-lock.json index fcc0113..d957738 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "skill-hub", "version": "0.0.0", "dependencies": { + "@balkangraph/orgchart.js": "^8.14.19", "@hookform/resolvers": "^3.3.4", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-avatar": "^1.0.4", @@ -505,6 +506,11 @@ "node": ">=6.9.0" } }, + "node_modules/@balkangraph/orgchart.js": { + "version": "8.14.19", + "resolved": "https://registry.npmjs.org/@balkangraph/orgchart.js/-/orgchart.js-8.14.19.tgz", + "integrity": "sha512-pa4km/5mTWmMcVLBIsHcuC73s4y1La9BOx4AU9ilGetQwlAbWfrFcSU7hf8FO49otmk1AysfBhPrcBoRl2i46w==" + }, "node_modules/@babel/template": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 64da555..c30d34d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "@balkangraph/orgchart.js": "^8.14.19", "@hookform/resolvers": "^3.3.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 5195a52..f9e5a5a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -7,8 +7,6 @@ import { } from "react-router-dom"; import Landing from "./components/pages/Landing/Landing"; import Main from "./components/pages/Main/Main"; -import Teams from "./components/pages/Teams/Teams"; -import MyTeams from "./components/pages/MyTeams/MyTeams"; import Successful from "./components/pages/Successful/Successful"; import AdminPage from "./components/pages/Admin/Admin"; diff --git a/frontend/src/components/pages/Tree/Tree.jsx b/frontend/src/components/pages/Tree/Tree.jsx new file mode 100644 index 0000000..353e8e8 --- /dev/null +++ b/frontend/src/components/pages/Tree/Tree.jsx @@ -0,0 +1,21 @@ +import React, { Component } from "react"; +import OrgChart from "../../../mytree.jsx"; + +const Tree = () => { + return ( +
+ +
+ ); +}; +export default Tree; diff --git a/frontend/src/mytree.jsx b/frontend/src/mytree.jsx new file mode 100644 index 0000000..d8d366a --- /dev/null +++ b/frontend/src/mytree.jsx @@ -0,0 +1,28 @@ +import React, { Component } from "react"; +import OrgChart from "@balkangraph/orgchart.js"; + +export default class Chart extends Component { + constructor(props) { + super(props); + this.divRef = React.createRef(); + } + + shouldComponentUpdate() { + return false; + } + + componentDidMount() { + this.chart = new OrgChart(this.divRef.current, { + nodes: this.props.nodes, + + nodeBinding: { + field_0: "name", + img_0: "img", + }, + }); + } + + render() { + return
; + } +}