WIP resume the implementation of folders
continuous-integration/drone/push Build is failing Details

folder
Maël DAIM 1 year ago
parent c82b329652
commit 56b6b4351c

@ -0,0 +1 @@
<svg enable-background="new 0 0 48 48" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg"><path d="m40 12h-18l-4-4h-10c-2.2 0-4 1.8-4 4v8h40v-4c0-2.2-1.8-4-4-4z" fill="#ffa000"/><path d="m40 12h-32c-2.2 0-4 1.8-4 4v20c0 2.2 1.8 4 4 4h32c2.2 0 4-1.8 4-4v-20c0-2.2-1.8-4-4-4z" fill="#ffca28"/></svg>

After

Width:  |  Height:  |  Size: 301 B

@ -1,11 +1,10 @@
import "../style/home/home.css" import "../style/home/home.css"
// import AccountSvg from "../assets/account.svg?react" // import AccountSvg from "../assets/account.svg?react"
import { Header } from "./template/Header" import {Header} from "./template/Header"
import { BASE } from "../Constants" import {BASE} from "../Constants"
import Popup from "../components/Popup"; import Popup from "../components/Popup";
import {useState} from "react"; import {useState} from "react";
import * as path from "path";
interface Tactic { interface Tactic {
id: number id: number
@ -21,15 +20,22 @@ interface Team {
second_color: string second_color: string
} }
interface Folder{
id:number
name:string
}
export default function Home({ export default function Home({
lastTactics, lastTactics,
allTactics, allTactics,
folders,
teams, teams,
username, username,
currentFolder currentFolder
}: { }: {
lastTactics: Tactic[] lastTactics: Tactic[]
allTactics: Tactic[] allTactics: Tactic[]
folders: Folder[]
teams: Team[] teams: Team[]
username: string username: string
currentFolder: number currentFolder: number
@ -40,6 +46,7 @@ export default function Home({
<Body <Body
lastTactics={lastTactics} lastTactics={lastTactics}
tactics={allTactics} tactics={allTactics}
folders={folders}
teams={teams} teams={teams}
currentFolder={currentFolder} currentFolder={currentFolder}
/> />
@ -50,11 +57,13 @@ export default function Home({
function Body({ function Body({
lastTactics, lastTactics,
tactics, tactics,
folders,
teams, teams,
currentFolder currentFolder
}: { }: {
lastTactics: Tactic[] lastTactics: Tactic[]
tactics: Tactic[] tactics: Tactic[]
folders: Folder[]
teams: Team[] teams: Team[]
currentFolder: number currentFolder: number
}) { }) {
@ -62,7 +71,7 @@ function Body({
const widthSideMenu = 100 - widthPersonalSpace const widthSideMenu = 100 - widthPersonalSpace
return ( return (
<div id="body"> <div id="body">
<PersonalSpace width={widthPersonalSpace} tactics={tactics} currentFolder={currentFolder}/> <PersonalSpace width={widthPersonalSpace} tactics={tactics} folders={folders} currentFolder={currentFolder}/>
<SideMenu <SideMenu
width={widthSideMenu} width={widthSideMenu}
lastTactics={lastTactics} lastTactics={lastTactics}
@ -98,10 +107,12 @@ function SideMenu({
function PersonalSpace({ function PersonalSpace({
width, width,
tactics, tactics,
folders,
currentFolder currentFolder
}: { }: {
width: number width: number
tactics: Tactic[] tactics: Tactic[]
folders: Folder[]
currentFolder: number currentFolder: number
}) { }) {
const [showPopup, setShowPopup] = useState(false) const [showPopup, setShowPopup] = useState(false)
@ -113,7 +124,7 @@ function PersonalSpace({
}}> }}>
<TitlePersonalSpace /> <TitlePersonalSpace />
<NewFolder showPopup={showPopup} setShowPopup={setShowPopup} currentFolder={currentFolder}/> <NewFolder showPopup={showPopup} setShowPopup={setShowPopup} currentFolder={currentFolder}/>
<BodyPersonalSpace tactics={tactics} /> <BodyPersonalSpace tactics={tactics} folders={folders} />
</div> </div>
) )
} }
@ -149,12 +160,17 @@ function TitlePersonalSpace() {
) )
} }
function TableData({ tactics }: { tactics: Tactic[] }) { function TableData({ tactics,folders }: { tactics: Tactic[],folders: Folder[]}) {
const nbRow = Math.floor(tactics.length / 3) + 1 const nbTacticRow = Math.floor(tactics.length / 3) + 1
let listTactic = Array(nbRow) const nbFolderRow = Math.floor(folders.length / 3) + 1
for (let i = 0; i < nbRow; i++) { let listTactic = Array(nbTacticRow)
let listFolder = Array(nbFolderRow)
for (let i = 0; i < nbTacticRow; i++) {
listTactic[i] = Array(0) listTactic[i] = Array(0)
} }
for (let i = 0; i < nbFolderRow ; i++) {
listFolder[i] = Array(0)
}
let i = 0 let i = 0
let j = 0 let j = 0
tactics.forEach((tactic) => { tactics.forEach((tactic) => {
@ -165,9 +181,17 @@ function TableData({ tactics }: { tactics: Tactic[] }) {
j = 0 j = 0
} }
}) })
folders.forEach((folder) => {
listFolder[i].push(folder)
j++
if (j === 3) {
i++
j = 0
}
})
i = 0 i = 0
while (i < nbRow) { while (i < nbTacticRow) {
listTactic[i] = listTactic[i].map((tactic: Tactic) => ( listTactic[i] = listTactic[i].map((tactic: Tactic) => (
<td <td
key={tactic.id} key={tactic.id}
@ -180,26 +204,49 @@ function TableData({ tactics }: { tactics: Tactic[] }) {
)) ))
i++ i++
} }
if (nbRow == 1) { i = 0
while (i < nbFolderRow) {
listFolder[i] = listFolder[i].map((folder: Folder) => (
<td
key={folder.id}
className="data"
onClick={() => {
location.pathname = BASE + "/tactic/" + folder.id + "/edit"
}}>
{truncateString(folder.name, 25)}
</td>
))
i++
}
if (nbTacticRow == 1) {
if (listTactic[0].length < 3) { if (listTactic[0].length < 3) {
for (let i = 0; i <= 3 - listTactic[0].length; i++) { for (let i = 0; i <= 3 - listTactic[0].length; i++) {
listTactic[0].push(<td key={"tdNone" + i}></td>) listTactic[0].push(<td key={"tdNone" + i}></td>)
} }
} }
} }
if (nbFolderRow == 1) {
if (listFolder[0].length < 3) {
for (let i = 0; i <= 3 - listFolder[0].length; i++) {
listFolder[0].push(<td key={"tdNone" + i}></td>)
}
}
}
const data = listTactic.map((tactic, rowIndex) => ( return listTactic.map((tactic, rowIndex) => (
<tr key={rowIndex + "row"}>{tactic}</tr> <tr key={rowIndex + "row"}>{tactic}</tr>
)) )).concat(listFolder.map((folder, rowIndex) => (
return data <tr key={rowIndex + "row"}>{folder}</tr>
)))
} }
function BodyPersonalSpace({ tactics }: { tactics: Tactic[] }) { function BodyPersonalSpace({ tactics,folders }: { tactics: Tactic[],folders: Folder[]}) {
let data let data
if (tactics.length == 0) { if (tactics.length == 0) {
data = <p>Aucune tactique créée !</p> data = <p>Aucune tactique créée !</p>
} else { } else {
data = <TableData tactics={tactics} /> data = <TableData tactics={tactics} folders={folders}/>
} }
return ( return (

@ -38,7 +38,7 @@ function getConnection(): Connection {
} }
function getUserController(): UserController { function getUserController(): UserController {
return new UserController(new TacticModel(new TacticInfoGateway(getConnection())), new TeamModel(new TeamGateway(getConnection()), new MemberGateway(getConnection()), new AccountGateway(getConnection())),new \IQBall\Core\Model\PersonalSpaceModel(new \IQBall\Core\Gateway\PersonalSpaceGateway(getConnection()))); return new UserController(new TacticModel(new TacticInfoGateway(getConnection())), new TeamModel(new TeamGateway(getConnection()), new MemberGateway(getConnection()), new AccountGateway(getConnection())),new \IQBall\Core\Model\PersonalSpaceModel(new \IQBall\Core\Gateway\PersonalSpaceGateway(getConnection()),new TacticInfoGateway(getConnection())));
} }
function getVisualizerController(): VisualizerController { function getVisualizerController(): VisualizerController {

@ -39,9 +39,9 @@ class UserController {
$user = $session->getAccount()->getUser(); $user = $session->getAccount()->getUser();
$lastTactics = $this->tactics->getLast($limitNbTactics, $user->getId()); $lastTactics = $this->tactics->getLast($limitNbTactics, $user->getId());
$rootTactics = $this->tactics->getFoldefrTactic($user->getId()); $rootTactics = $this->personalSpace->getTacticFromFolder($user->getId());
$rootFolders = $this->personalSpace->getFolderFromFolder($user->getId());
$name = $user->getName(); $name = $user->getName();
if ($this->teams != null) { if ($this->teams != null) {
$teams = $this->teams->getAll($user->getId()); $teams = $this->teams->getAll($user->getId());
} else { } else {
@ -51,6 +51,7 @@ class UserController {
return ViewHttpResponse::react("views/Home.tsx", [ return ViewHttpResponse::react("views/Home.tsx", [
"lastTactics" => $lastTactics, "lastTactics" => $lastTactics,
"allTactics" => $rootTactics, "allTactics" => $rootTactics,
"folders" => $rootFolders,
"teams" => $teams, "teams" => $teams,
"username" => $name, "username" => $name,
"currentFolder" => $rootFolder "currentFolder" => $rootFolder

@ -1,6 +1,6 @@
<?php <?php
namespace IQBall\Core\Data; namespace IQBall\Core\Data\PersonalSpace;
class PersonalSpaceFolder implements PersonalSpaceItem { class PersonalSpaceFolder implements PersonalSpaceItem {
private int $id; private int $id;

@ -1,6 +1,6 @@
<?php <?php
namespace IQBall\Core\Data; namespace IQBall\Core\Data\PersonalSpace;
interface PersonalSpaceItem { interface PersonalSpaceItem {
public function getId(); public function getId();

@ -1,6 +1,7 @@
<?php <?php
namespace IQBall\Core\Data; namespace IQBall\Core\Data;
use IQBall\Core\Data\PersonalSpace\PersonalSpaceItem;
class TacticInfo implements PersonalSpaceItem { class TacticInfo implements PersonalSpaceItem {
private int $id; private int $id;

@ -1,8 +1,11 @@
<?php <?php
namespace IQBall\Core\Gateway; namespace IQBall\Core\Gateway;
use IQBall\Core\Connection; use IQBall\Core\Connection;
use IQBall\Core\Data\PersonalSpace\PersonalSpaceFolder;
use IQBall\Core\Data\TacticInfo;
use PDO;
use IQBall\Core\Data\CourtType;
class PersonalSpaceGateway { class PersonalSpaceGateway {
private Connection $con; private Connection $con;
@ -28,38 +31,48 @@ class PersonalSpaceGateway {
* @param int $folderId * @param int $folderId
* @return array * @return array
*/ */
public function getContentFromFolder(int $accountId, int $folderId): array { public function getFolder(int $accountId, int $folderId): array {
if ($folderId == 0) { if ($folderId == 0) {
$content = $this->getTacticFromRoot($accountId); $folders = $this->getFolderFromRoot($accountId);
$content = array_merge($this->getFolderFromRoot($accountId), $content);
} else { } else {
$content = $this->getTacticFromFolder($accountId, $folderId); $folders = $this->getFolderFromFolder($accountId, $folderId);
$content = array_merge($this->getFolderFromFolder($accountId, $folderId), $content);
} }
return $content; return $folders;
}
public function getTactic(int $accountId, int $folderId):array{
if ($folderId == 0) {
$tactics = $this->getTacticFromRoot($accountId);
} else {
$tactics = $this->getTacticFromFolder($accountId, $folderId);
}
return $tactics;
} }
public function getTacticFromRoot(int $accountId): array { private function getTacticFromRoot(int $accountId): array {
return $this->con->fetch( $result = $this->con->fetch(
"SELECT t.* "SELECT t.*
FROM Tactic t FROM Tactic t
WHERE t.owner = :ownerId AND t.id NOT IN (SELECT id_tactic FROM TacticFolderLink)", WHERE t.owner = :ownerId AND t.id NOT IN (SELECT id_tactic FROM TacticFolderLink)",
["ownerId" => [$accountId, PDO::PARAM_INT]] ["ownerId" => [$accountId, PDO::PARAM_INT]]
); );
return array_map(fn($row) => new TacticInfo($row['id'],$row['name'],$row['creation_date'],$row['owner'],CourtType::fromName($row['court_type']),$row['content']),$result);
} }
public function getFolderFromRoot(int $accountId): array { private function getFolderFromRoot(int $accountId): array {
return $this->con->fetch( $result = $this->con->fetch(
"SELECT * "SELECT *
FROM TacticFolder FROM TacticFolder
WHERE owner = :owner AND tactic_folder_parent IS NULL", WHERE owner = :owner AND tactic_folder_parent IS NULL",
["ownerId" => [$accountId, PDO::PARAM_INT]] ["ownerId" => [$accountId, PDO::PARAM_INT]]
); );
var_dump($result);
return array_map(fn($row) => new PersonalSpaceFolder($row['id'],$row['name']),$result);
} }
public function getTacticFromFolder(int $accountId, int $folderId): array { private function getTacticFromFolder(int $accountId, int $folderId): array {
return $this->con->fetch( $result = $this->con->fetch(
"SELECT t.* "SELECT t.*
FROM Tactic t, TacticFolderLink tfl FROM Tactic t, TacticFolderLink tfl
WHERE t.owner = :ownerId AND tfl.id_tactic = :folderId", WHERE t.owner = :ownerId AND tfl.id_tactic = :folderId",
@ -68,10 +81,12 @@ class PersonalSpaceGateway {
"folderId" => [$folderId, PDO::PARAM_INT] "folderId" => [$folderId, PDO::PARAM_INT]
] ]
); );
return array_map(fn($row) => new TacticInfo($row['id'],$row['name'],$row['creation_date'],$row['owner'],CourtType::fromName($row['court_type']),$row['content']),$result);
} }
public function getFolderFromFolder(int $accountId, int $folderId): array { private function getFolderFromFolder(int $accountId, int $folderId): array {
return $this->con->fetch( $result = $this->con->fetch(
"SELECT * "SELECT *
FROM TacticFolder FROM TacticFolder
WHERE owner = :ownerId AND tactic_folder_parent = :folderId", WHERE owner = :ownerId AND tactic_folder_parent = :folderId",
@ -80,5 +95,6 @@ class PersonalSpaceGateway {
"folderId" => [$folderId, PDO::PARAM_INT] "folderId" => [$folderId, PDO::PARAM_INT]
] ]
); );
return array_map(fn($row) => new PersonalSpaceFolder($row['id'],$row['name']),$result);
} }
} }

@ -22,9 +22,12 @@ class PersonalSpaceModel {
$this->personalSpaces->addFolder($folderName,$ownerId,$parentFolder); $this->personalSpaces->addFolder($folderName,$ownerId,$parentFolder);
} }
public function getFolderContent(int $acountId,int $folderId = 0): array{ public function getFolderFromFolder(int $accountId,int $folderId = 0): array{
$tactics = $this->personalSpaces->getFolderTactic($acountId,$folderId); return $this->personalSpaces->getFolder($accountId,$folderId);
}
public function getTacticFromFolder(int $accountId,int $folderId = 0): array{
return $this->personalSpaces->getTactic($accountId,$folderId);
} }
} }
Loading…
Cancel
Save