From a54df648c3e6ac795de5ecbcfa8f51e4b21e39ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80?= Date: Tue, 2 Apr 2024 14:01:35 +0300 Subject: [PATCH 1/2] Completed Events, now the user will know more detailed information --- ...event_end_date_event_is_online_and_more.py | 52 +++++++++++++++++++ backend/project/api/events/models.py | 42 ++++++++++++++- 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 backend/project/api/events/migrations/0002_event_description_event_end_date_event_is_online_and_more.py 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 From 0d34a550d6f174cbadbd83a849d01819a5724167 Mon Sep 17 00:00:00 2001 From: Data-Name-ID Date: Tue, 2 Apr 2024 15:38:10 +0300 Subject: [PATCH 2/2] [feat] trees --- frontend/package-lock.json | 6 +++++ frontend/package.json | 1 + frontend/src/App.tsx | 2 -- frontend/src/components/pages/Tree/Tree.jsx | 21 ++++++++++++++++ frontend/src/mytree.jsx | 28 +++++++++++++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/pages/Tree/Tree.jsx create mode 100644 frontend/src/mytree.jsx diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5f8e88d..6b417fe 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-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", @@ -90,6 +91,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/@esbuild/darwin-x64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index cadf074..0d708c9 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
; + } +}