Functionnal basic versions implementation on the backend and made the emty small card component for frontend
This commit is contained in:
parent
683f8784a7
commit
45900e9033
|
@ -2,6 +2,9 @@ const handleError = require("../middleware/errors");
|
||||||
const mod_service = require("../services/modService");
|
const mod_service = require("../services/modService");
|
||||||
const { authorizeModModification, authenticateToken } = require("../middleware/auth");
|
const { authorizeModModification, authenticateToken } = require("../middleware/auth");
|
||||||
|
|
||||||
|
|
||||||
|
// Mods
|
||||||
|
|
||||||
async function listMods(req, res) {
|
async function listMods(req, res) {
|
||||||
try {
|
try {
|
||||||
// Query
|
// Query
|
||||||
|
@ -65,5 +68,63 @@ async function deleteMod(req, res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Versions
|
||||||
|
|
||||||
module.exports = { listMods, getModByName, createMod, modifyMod, deleteMod };
|
async function createModVersion(req, res) {
|
||||||
|
try {
|
||||||
|
// Authorize
|
||||||
|
await authorizeModModification(req);
|
||||||
|
// Query
|
||||||
|
const name = req.params.name
|
||||||
|
const version_data = req.body;
|
||||||
|
const query_result = await mod_service.createModVersion(name, version_data);
|
||||||
|
res.json(query_result);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function modifyModVersion(req, res) {
|
||||||
|
try {
|
||||||
|
// Authorize
|
||||||
|
await authorizeModModification(req);
|
||||||
|
// Query
|
||||||
|
const name = req.params.name
|
||||||
|
const version_data = req.body;
|
||||||
|
const query_result = await mod_service.modifyModVersion(name, version_data);
|
||||||
|
res.json(query_result);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getModVersions(req, res) {
|
||||||
|
try {
|
||||||
|
// Query
|
||||||
|
const name = req.params.name
|
||||||
|
const filters = req.query;
|
||||||
|
const query_result = await mod_service.getModVersions(name, filters);
|
||||||
|
res.json(query_result);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteModVersion(req, res) {
|
||||||
|
try {
|
||||||
|
// Authorize
|
||||||
|
await authorizeModModification(req);
|
||||||
|
// Query
|
||||||
|
const name = req.params.name
|
||||||
|
const version_infos = req.body;
|
||||||
|
const query_result = await mod_service.deleteModVersion(name, version_infos);
|
||||||
|
res.json(query_result);
|
||||||
|
} catch (error) {
|
||||||
|
handleError(error, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = { listMods, getModByName, createMod, modifyMod, deleteMod,
|
||||||
|
createModVersion, modifyModVersion, getModVersions, deleteModVersion };
|
|
@ -6,7 +6,6 @@ const db = getDatabase();
|
||||||
// --- Get ---
|
// --- Get ---
|
||||||
|
|
||||||
async function listMods(filters) {
|
async function listMods(filters) {
|
||||||
console.debug(filters);
|
|
||||||
return await db.query(`SELECT name, display_name, author, description FROM Mods
|
return await db.query(`SELECT name, display_name, author, description FROM Mods
|
||||||
WHERE
|
WHERE
|
||||||
(CASE WHEN @search IS NOT NULL THEN
|
(CASE WHEN @search IS NOT NULL THEN
|
||||||
|
@ -34,29 +33,44 @@ async function getFullModInfos(name) {
|
||||||
return [await base_infos, await other_infos, await tags];
|
return [await base_infos, await other_infos, await tags];
|
||||||
}
|
}
|
||||||
|
|
||||||
async function listVersions(mod_name) {
|
|
||||||
return await db.query("SELECT * FROM ModVersions WHERE mod = ?", [mod_name]);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function listTags(mod_name) {
|
async function listTags(mod_name) {
|
||||||
return await db.query(`SELECT tag FROM ModTags WHERE mod = ?`, [mod_name]);
|
return await db.query(`SELECT tag FROM ModTags WHERE mod = ?`, [mod_name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getVersionByNumber(mod_name, version_number) {
|
//TODO rm
|
||||||
return await db.query(`SELECT * FROM ModVersions
|
async function listAllModVersions() {
|
||||||
WHERE mod = ?
|
return await db.query(`SELECT * FROM ModVersions`);
|
||||||
AND version_number = ?;`,
|
|
||||||
[mod_name, version_number]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getVersion(mod_name, version_number, game_version, platform, environment) {
|
async function getModVersions(mod_name, filters) {
|
||||||
return await db.query(`SELECT * FROM ModVersions
|
return await db.query(`SELECT * FROM ModVersions
|
||||||
WHERE mod = ?
|
WHERE mod = @mod_name
|
||||||
AND version_number = ?
|
AND
|
||||||
AND game_version = ?
|
(CASE WHEN @version_number IS NOT NULL THEN
|
||||||
AND platform = ?
|
version_number = @version_number ELSE TRUE END)
|
||||||
AND environment = ?;`,
|
AND
|
||||||
[mod_name, version_number, game_version, platform, environment]);
|
(CASE WHEN @channel IS NOT NULL THEN
|
||||||
|
channel = @channel ELSE TRUE END)
|
||||||
|
AND
|
||||||
|
(CASE WHEN @game_version IS NOT NULL THEN
|
||||||
|
game_version = @game_version ELSE TRUE END)
|
||||||
|
AND
|
||||||
|
(CASE WHEN @platform IS NOT NULL THEN
|
||||||
|
platform = @platform ELSE TRUE END)
|
||||||
|
AND
|
||||||
|
(CASE WHEN @environment IS NOT NULL THEN
|
||||||
|
environment = @environment ELSE TRUE END)
|
||||||
|
;`, {mod_name, ...filters});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getStrictModVersion(mod_name, version_number, game_version, platform, environment) {
|
||||||
|
return await db.query(`SELECT * FROM ModVersions
|
||||||
|
WHERE mod = ?
|
||||||
|
AND version_number = ?
|
||||||
|
AND game_version = ?
|
||||||
|
AND platform = ?
|
||||||
|
AND environment = ?
|
||||||
|
;`, [mod_name, version_number, game_version, platform, environment]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Create ---
|
// --- Create ---
|
||||||
|
@ -97,11 +111,15 @@ async function createMod(name, display_name, author, description, mod_infos) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addVersion(mod, version_number, channel, changelog, release_date, game_version, platform, environment, url) {
|
async function createModVersion(mod, version_infos) {
|
||||||
|
|
||||||
|
const { version_number, channel, changelog, release_date, game_version, platform, environment, url } = version_infos;
|
||||||
|
|
||||||
await db.run(`INSERT INTO ModVersions (mod, version_number, channel, changelog, release_date, game_version, environment, platform, url)
|
await db.run(`INSERT INTO ModVersions (mod, version_number, channel, changelog, release_date, game_version, environment, platform, url)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);`,
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);`,
|
||||||
[mod, version_number, channel, changelog, release_date, game_version, environment, platform, url]);
|
[mod, version_number, channel, changelog, release_date, game_version, environment, platform, url]);
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +161,7 @@ async function deleteMod(name) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteVersion(name, version_number, game_version, platform, environment) {
|
async function deleteModVersion(name, version_number, game_version, platform, environment) {
|
||||||
await db.run(`DELETE FROM ModVersions WHERE mod = ?
|
await db.run(`DELETE FROM ModVersions WHERE mod = ?
|
||||||
AND version_number = ?
|
AND version_number = ?
|
||||||
AND game_version = ?
|
AND game_version = ?
|
||||||
|
@ -195,8 +213,8 @@ async function containsTag(name, tag) {
|
||||||
// --- Exports ---
|
// --- Exports ---
|
||||||
|
|
||||||
module.exports = { listMods, getModByName, getFullModInfos,
|
module.exports = { listMods, getModByName, getFullModInfos,
|
||||||
listVersions, listTags, getVersionByNumber, getVersion,
|
getModVersions, listTags, getStrictModVersion,
|
||||||
createMod, addVersion, addTags,
|
createMod, createModVersion, addTags,
|
||||||
updateMod,
|
updateMod,
|
||||||
deleteMod, deleteVersion, deleteTags,
|
deleteMod, deleteModVersion, deleteTags,
|
||||||
exists };
|
exists, listAllModVersions };
|
|
@ -24,4 +24,26 @@ router.delete("/:name", async (req,res) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create a mod version
|
||||||
|
router.post("/:name/versions", async (req, res) => {
|
||||||
|
controller.createModVersion(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Modify a mod version
|
||||||
|
router.put("/:name/versions", async (req,res) => {
|
||||||
|
controller.modifyModVersion(req,res);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get mod versions
|
||||||
|
router.get("/:name/versions", async (req,res) => {
|
||||||
|
controller.getModVersions(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Delete mod version
|
||||||
|
router.delete("/:name/versions", async (req,res) => {
|
||||||
|
controller.deleteModVersion(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
|
@ -5,7 +5,8 @@ const { mdToHtml } = require("../utils/convert");
|
||||||
const { sanitizeModData } = require("../utils/sanitize");
|
const { sanitizeModData } = require("../utils/sanitize");
|
||||||
|
|
||||||
|
|
||||||
// --- Get ---
|
// --- Mods ---
|
||||||
|
|
||||||
|
|
||||||
async function listMods(filters) {
|
async function listMods(filters) {
|
||||||
//TODO Validate filters
|
//TODO Validate filters
|
||||||
|
@ -17,6 +18,7 @@ async function listMods(filters) {
|
||||||
return await model.listMods({...filters});
|
return await model.listMods({...filters});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function getModByName(name) {
|
async function getModByName(name) {
|
||||||
const res = await model.getModByName(name);
|
const res = await model.getModByName(name);
|
||||||
if (res.length == 0) {
|
if (res.length == 0) {
|
||||||
|
@ -25,6 +27,7 @@ async function getModByName(name) {
|
||||||
return res[0];
|
return res[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function getFullModInfos(name) {
|
async function getFullModInfos(name) {
|
||||||
const [base_infos, other_infos, tags] = await model.getFullModInfos(name);
|
const [base_infos, other_infos, tags] = await model.getFullModInfos(name);
|
||||||
// Check
|
// Check
|
||||||
|
@ -37,17 +40,6 @@ async function getFullModInfos(name) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getModVersion(infos) {
|
|
||||||
const { mod, version_number, game_version, platform, environment} = infos;
|
|
||||||
const res = await model.getModVersion(mod, version_number, game_version, platform, environment);
|
|
||||||
if (res.length == 0) {
|
|
||||||
throw new AppError(404, "Cannot find mod with this name", "Not found");
|
|
||||||
}
|
|
||||||
return res[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// --- Create ---
|
|
||||||
|
|
||||||
async function createMod(mod_data, author) {
|
async function createMod(mod_data, author) {
|
||||||
|
|
||||||
|
@ -67,46 +59,9 @@ async function createMod(mod_data, author) {
|
||||||
await model.createMod(name, display_name, author, description, mod_infos);
|
await model.createMod(name, display_name, author, description, mod_infos);
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return getModByName(name);
|
return await getModByName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function addVersion(version_data) {
|
|
||||||
|
|
||||||
// Validate
|
|
||||||
//TODO
|
|
||||||
console.warn("Skipping validity checks for addVersion");
|
|
||||||
|
|
||||||
// Generate data
|
|
||||||
const { mod_name, version_number, channel, changelog, game_version,
|
|
||||||
platform, environment, url } = version_data; // Split
|
|
||||||
changelog = await mdToHtml(changelog); // Convert
|
|
||||||
await sanitizeModData(mod_data); // Sanitize
|
|
||||||
const release_date = (new Date()).toLocaleDateString();
|
|
||||||
|
|
||||||
// Write changes
|
|
||||||
await model.addVersion(mod_name, version_number, channel, changelog,
|
|
||||||
release_date, game_version, platform, environment, url); // Database
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return await model.getModVersion(mod_name, version_number, game_version, platform, environment );
|
|
||||||
}
|
|
||||||
|
|
||||||
async function addTags(mod, tags) {
|
|
||||||
|
|
||||||
// Validate
|
|
||||||
//TODO
|
|
||||||
console.warn("Skipping validity checks for addTags");
|
|
||||||
|
|
||||||
// Write changes
|
|
||||||
await model.addTags(mod, tags);
|
|
||||||
|
|
||||||
// Return
|
|
||||||
const { tags:res } = await model.getFullModInfos(mod);
|
|
||||||
return { "mod": mod, "tags": res};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Update ---
|
|
||||||
|
|
||||||
async function updateMod(diff_data) {
|
async function updateMod(diff_data) {
|
||||||
//TODO
|
//TODO
|
||||||
|
@ -114,9 +69,6 @@ async function updateMod(diff_data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Delete
|
|
||||||
|
|
||||||
async function deleteMod(name) {
|
async function deleteMod(name) {
|
||||||
|
|
||||||
// Check existence
|
// Check existence
|
||||||
|
@ -138,22 +90,102 @@ async function deleteMod(name) {
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteVersion(version_infos) {
|
|
||||||
|
|
||||||
|
// --- Versions ---
|
||||||
|
|
||||||
|
|
||||||
|
async function createModVersion(mod_name, version_data) {
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
//TODO
|
||||||
|
console.warn("Skipping validity checks for createModVersion");
|
||||||
|
|
||||||
|
// Generate data
|
||||||
|
const { version_number, channel, changelog, game_version,
|
||||||
|
platform, environment, url } = version_data; // Split
|
||||||
|
|
||||||
|
// changelog = await mdToHtml(changelog); // Convert
|
||||||
|
// await sanitizeModData(mod_data); // Sanitize
|
||||||
|
const release_date = Date.now();
|
||||||
|
|
||||||
|
// Write changes
|
||||||
|
await model.createModVersion(mod_name, {version_number, channel, changelog,
|
||||||
|
release_date, game_version, platform, environment, url}); // Database
|
||||||
|
|
||||||
|
// Return
|
||||||
|
return await model.getStrictModVersion(mod_name, version_number, game_version, platform, environment );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function modifyModVersion(infos) {
|
||||||
|
throw new AppError(501, "Not implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function getModVersions(mod_name, filters) {
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
//TODO
|
||||||
|
console.warn("Skipping getModVersions validation (Not implemented)");
|
||||||
|
|
||||||
|
filters.version_number = filters.version_number || null;
|
||||||
|
filters.channel = filters.channel || null;
|
||||||
|
filters.game_version = filters.game_version || null;
|
||||||
|
filters.platform = filters.platform || null;
|
||||||
|
filters.environment = filters.environment || null;
|
||||||
|
|
||||||
|
// Query
|
||||||
|
const res= await model.getModVersions(mod_name, {...filters});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
// async function getModVersion(version_infos) {
|
||||||
|
// const { mod, version_number, game_version, platform, environment} = version_infos;
|
||||||
|
// const res = await model.getModVersion(mod, version_number, game_version, platform, environment);
|
||||||
|
// if (res.length == 0) {
|
||||||
|
// throw new AppError(404, "Cannot find mod with this name", "Not found");
|
||||||
|
// }
|
||||||
|
// return res[0];
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
async function deleteModVersion(mod_name, version_infos) {
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
// Generate data
|
// Generate data
|
||||||
const res = await getModVersion(version_infos);
|
const { version_number, game_version, platform, environment } = version_infos;
|
||||||
const { mod, version_number, game_version, platform, environment} = version_infos;
|
const res = await model.getStrictModVersion(mod_name, version_number, game_version, platform, environment );
|
||||||
|
|
||||||
// Write changes to db
|
// Write changes to db
|
||||||
await model.deleteVersion(mod, version_number, game_version, platform, environment);
|
await model.deleteModVersion(mod_name, version_number, game_version, platform, environment);
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// --- Tags ---
|
||||||
|
|
||||||
|
|
||||||
|
async function addTags(mod, tags) {
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
//TODO
|
||||||
|
console.warn("Skipping validity checks for addTags");
|
||||||
|
|
||||||
|
// Write changes
|
||||||
|
await model.addTags(mod, tags);
|
||||||
|
|
||||||
|
// Return
|
||||||
|
const { tags:res } = await model.getFullModInfos(mod);
|
||||||
|
return { "mod": mod, "tags": res};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function deleteTags(mod, tags) {
|
async function deleteTags(mod, tags) {
|
||||||
|
|
||||||
// Validate (check existence)
|
// Validate (check existence)
|
||||||
|
@ -168,7 +200,10 @@ async function deleteTags(mod, tags) {
|
||||||
return { "mod": mod, "tags": res};
|
return { "mod": mod, "tags": res};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = { listMods, getModByName, getFullModInfos,
|
module.exports = { listMods, getModByName, getFullModInfos,
|
||||||
createMod, addTags, addVersion,
|
createMod, updateMod, deleteMod,
|
||||||
updateMod,
|
createModVersion, modifyModVersion, getModVersions, deleteModVersion,
|
||||||
deleteMod, deleteTags, deleteVersion };
|
addTags, deleteTags };
|
34
frontend/src/components/Cards/small_card.jsx
Normal file
34
frontend/src/components/Cards/small_card.jsx
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Preact
|
||||||
|
import { h } from 'preact' // Necessary ?
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
import styles from './small_card.module.css'
|
||||||
|
|
||||||
|
// Images
|
||||||
|
import Thumbnail from '../../assets/mod.svg'
|
||||||
|
import Banner from '../../assets/example.jpg'
|
||||||
|
|
||||||
|
function SmallCard({item, variant, href}) {
|
||||||
|
console.debug(variant, item);
|
||||||
|
|
||||||
|
if (variant === 'empty') {
|
||||||
|
return (
|
||||||
|
<a className={styles.emptyCard} href={href}>
|
||||||
|
<p className={styles.emptyCardText}>{item}</p>
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
} else if (variant === 'mod') {
|
||||||
|
|
||||||
|
const item_page = "/mods/" + item.name;
|
||||||
|
return (
|
||||||
|
<a className={styles.Card} href={href}>
|
||||||
|
<div className={styles.CardText}>
|
||||||
|
{item.display_name}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SmallCard;
|
51
frontend/src/components/Cards/small_card.module.css
Normal file
51
frontend/src/components/Cards/small_card.module.css
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
.emptyCard {
|
||||||
|
height: 100%;
|
||||||
|
width: 22em;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
background-color: #141414;
|
||||||
|
border: #3a3a3a .1rem solid;
|
||||||
|
border-radius: 1rem;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.emptyCardText {
|
||||||
|
|
||||||
|
padding: 1em;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
color: #9a9a9a;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Card {
|
||||||
|
height: 100%;
|
||||||
|
width: 22em;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
background-color: #141414;
|
||||||
|
border: #3a3a3a .1rem solid;
|
||||||
|
border-radius: 1rem;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CardText {
|
||||||
|
|
||||||
|
padding: 1em;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
color: #9a9a9a;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
user-select: none;
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
height: 5rem;
|
height: 5rem;
|
||||||
min-width: 29rem; /* TODO update when changing navbar items (not automatic)*/
|
min-width: fit-content;
|
||||||
|
|
||||||
background-color: #1a1a1a;
|
background-color: #1a1a1a;
|
||||||
color: #eaeaea;
|
color: #eaeaea;
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { listMods } from '../services/mods';
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
import Button from '../components/Buttons/button'
|
import Button from '../components/Buttons/button'
|
||||||
|
import SmallCard from '../components/Cards/small_card';
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
import Logo from '../assets/logo.png'
|
import Logo from '../assets/logo.png'
|
||||||
|
@ -18,6 +19,7 @@ import Add from '../assets/add.svg'
|
||||||
import styles from '../styles/dashboard.module.css'
|
import styles from '../styles/dashboard.module.css'
|
||||||
|
|
||||||
function DashboardPage() {
|
function DashboardPage() {
|
||||||
|
//TODO takes too long to load
|
||||||
|
|
||||||
// useStates
|
// useStates
|
||||||
|
|
||||||
|
@ -117,11 +119,10 @@ function DashboardPage() {
|
||||||
Favorites
|
Favorites
|
||||||
</p>
|
</p>
|
||||||
<div className={styles.tiles}>
|
<div className={styles.tiles}>
|
||||||
<div className={styles.emptyTile}>
|
<SmallCard
|
||||||
<p className={styles.emptyTileText}>
|
variant='empty'
|
||||||
You have no favorites for the moment
|
item={"You have no favorites for the moment"}
|
||||||
</p>
|
/>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.category}>
|
<div className={styles.category}>
|
||||||
|
@ -132,19 +133,20 @@ function DashboardPage() {
|
||||||
|
|
||||||
{/* Temporary, missing card component */}
|
{/* Temporary, missing card component */}
|
||||||
{creations.map( (item) => {
|
{creations.map( (item) => {
|
||||||
console.debug(item.name);
|
return (
|
||||||
return (<div className={styles.emptyTile}>
|
<SmallCard
|
||||||
<div className={styles.emptyTileText}>
|
variant='mod'
|
||||||
{item.display_name}
|
href={'/mods/'+item.name}
|
||||||
</div>
|
item={item}
|
||||||
</div>);
|
/>
|
||||||
|
);
|
||||||
})}
|
})}
|
||||||
|
|
||||||
<a className={styles.emptyTile} href='/create/mod'>
|
<SmallCard
|
||||||
<p className={styles.emptyTileText}>
|
variant='empty'
|
||||||
<img src={Add} ></img>
|
item={<img src={Add} ></img>}
|
||||||
</p>
|
href='/create/mod'
|
||||||
</a>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.toolbar}>
|
<div className={styles.toolbar}>
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.emptyTile {
|
.emptyTile {
|
||||||
height: 99%;
|
height: 100%;
|
||||||
width: 22em;
|
width: 22em;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -55,6 +55,8 @@
|
||||||
background-color: #141414;
|
background-color: #141414;
|
||||||
border: #3a3a3a .1rem solid;
|
border: #3a3a3a .1rem solid;
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
|
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.emptyTileText {
|
.emptyTileText {
|
||||||
|
|
Loading…
Reference in a new issue