Ignore:
Timestamp:
01/21/25 03:08:24 (3 days ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
0c6b92a
Message:

F4 Finalna Verzija

File:
1 edited

Legend:

Unmodified
Added
Removed
  • imaps-frontend/src/pages/BrowseMaps/BrowseMaps.jsx

    r0c6b92a r79a0317  
    11import styles from "./Maps.module.css";
    22import "react-tiles-dnd/esm/index.css";
    3 import { TilesContainer } from "react-tiles-dnd";
    4 import { Link } from "react-router-dom";
     3import {TilesContainer} from "react-tiles-dnd";
     4import {Link} from "react-router-dom";
    55import card from "../../assets/card-map.png";
    66import star_icon from "../../assets/star_icon.png"; // Unfilled star icon
    77import star_filled_icon from "../../assets/star_filled_icon.png"; // Filled star icon
    8 import { useEffect, useState } from "react";
     8import {useEffect, useState} from "react";
    99import HttpService from "../../scripts/net/HttpService.js";
    1010import Logo from "../../components/Logo/Logo.jsx";
    1111import Profile from "../../components/Profile/Profile.jsx";
    1212import config from "../../scripts/net/netconfig.js";
    13 import { useAppContext } from "../../components/AppContext/AppContext.jsx";
     13import {useAppContext} from "../../components/AppContext/AppContext.jsx";
     14import FilterMaps from "../../components/FilterMaps/FilterMaps.jsx";
    1415
    1516let loadedTiles = [];
    1617
    17 const renderTile = ({ data, isDragging, toggleFavorite }) => (
    18     <div style={{ padding: "1rem", width: "100%", position: "relative" }}>
    19         <Link to={`/Maps/${data.text}/View`} className={styles.linkStyle}>
     18const renderTile = ({data, isDragging, toggleFavorite}) => (
     19    <div style={{padding: "1rem", width: "100%", position: "relative"}}>
     20        <Link to={`/Maps/View/${data.text}`} className={styles.linkStyle}>
    2021            <div
    2122                className={`${styles.tile} ${isDragging ? styles.dragging : ""}`}
    22                 style={{ width: "100%", height: "100%" }}
     23                style={{width: "100%", height: "100%"}}
    2324            >
    24                 <img src={card} className={styles.imgStyle} alt="Map Thumbnail" />
    25                 <div style={{ fontFamily: "exo" }}>
     25                <img src={card} className={styles.imgStyle} alt="Map Thumbnail"/>
     26                <div style={{fontFamily: "exo"}}>
    2627                    {data.text} {isDragging ? "DRAGGING" : null}
    2728                </div>
     
    3233                src={data.isFavorite ? star_filled_icon : star_icon}
    3334                alt="Favorite Icon"
    34                 style={{ width: "20px", height: "20px" }}
     35                style={{width: "20px", height: "20px"}}
    3536            />
    3637        </div>
     
    4647    const [searchTerm, setSearchTerm] = useState("");
    4748    const [tiles, setTiles] = useState([]);
    48     const { username, isAuthenticated } = useAppContext();
     49    const {username, isAuthenticated} = useAppContext();
     50    const [filter, setFilter] = useState("all")
     51    const [mapFilters, setMapFilters] = useState([])
    4952
    5053    useEffect(() => {
     
    5255            const httpService = new HttpService();
    5356            let mapTiles = [];
    54 
     57            let mapTypes = ['Hospital', 'Faculty', 'House', 'Other'];
    5558            if (isAuthenticated) {
    5659                // :D
     
    6366                    rows: 1,
    6467                    isFavorite: true,
     68                    type: elem.mapType,
    6569                }));
    6670
     71                console.log("TUKA")
    6772                // Load all maps
    6873                const allResp = await httpService.get(config.view_maps.display);
    6974                console.log("RESPONSE MAPS PUBLIC", allResp);
     75
     76                // mapTypes = allResp.filter(elem => elem.mapType != null && elem.mapType !== "").map(elem => elem.mapType);
     77
    7078
    7179                const nonFavMapTiles = allResp
     
    7684                        rows: 1,
    7785                        isFavorite: false,
     86                        type: elem.mapType,
    7887                    }));
     88
    7989
    8090                mapTiles = [...favMapTiles, ...nonFavMapTiles];
     
    8292                const allResp = await httpService.get(config.view_maps.display);
    8393                console.log("RESPONSE MAPS PUBLIC", allResp);
     94                // mapTypes = allResp.filter(elem => elem.mapType != null && elem.mapType !== "").map(elem => elem.mapType);
    8495
    8596                mapTiles = allResp.map((elem) => ({
     
    8899                    rows: 1,
    89100                    isFavorite: false,
     101                    type: elem.mapType,
    90102                }));
    91103            }
     104
     105            console.log("TYPES:", mapTypes);
     106            setMapFilters(mapTypes);
    92107
    93108            loadedTiles = [...mapTiles];
     
    114129
    115130        const updatedTiles = tiles.map((tile) =>
    116             tile.text === tileName ? { ...tile, isFavorite: !tile.isFavorite } : tile
     131            tile.text === tileName ? {...tile, isFavorite: !tile.isFavorite} : tile
    117132        );
    118133
     
    140155    };
    141156
     157    const onFilter = (selectedFilter) => {
     158        setFilter(selectedFilter);
     159
     160        if (selectedFilter === "all") {
     161            // Show all tiles
     162            setTiles(loadedTiles);
     163        } else {
     164            // Filter tiles by selected type
     165            const filteredTiles = loadedTiles.filter((tile) => tile.type === selectedFilter);
     166            setTiles(filteredTiles);
     167        }
     168    };
     169
     170
    142171    return (
    143172        <div className={styles.container}>
     
    152181                    onChange={handleSearchChange}
    153182                />
     183
    154184            </div>
    155 
     185            <div className={styles.filterBar}>
     186            <FilterMaps mapTypes={mapFilters} setFilter={onFilter}></FilterMaps>
     187            </div>
     188            {filter !== "all" && tiles.length === 0 && <p>No maps of type {filter} found</p>}
    156189            <TilesContainer
    157190                data={tiles}
    158                 renderTile={(props) => renderTile({ ...props, toggleFavorite })}
     191                renderTile={(props) => renderTile({...props, toggleFavorite})}
    159192                tileSize={tileSize}
    160                 forceTileWidth={150}
    161                 forceTileHeight={170}
     193                forceTileWidth={170}
     194                forceTileHeight={200}
    162195            />
    163196        </div>
Note: See TracChangeset for help on using the changeset viewer.