feat: sidebar modifiable par les jdrs

This commit is contained in:
Kazhnuz 2023-02-08 00:40:10 +01:00
parent bce09a78a8
commit e4d9766b1c
9 changed files with 74 additions and 8 deletions

10
package-lock.json generated
View file

@ -8,8 +8,10 @@
"name": "pelican-jdr",
"version": "0.0.0",
"dependencies": {
"@types/lodash": "^4.14.191",
"@types/marked": "^4.0.8",
"axios": "^1.3.2",
"lodash": "^4.17.21",
"marked": "^4.2.12",
"pinia": "^2.0.28",
"sass": "^1.58.0",
@ -498,6 +500,11 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true
},
"node_modules/@types/lodash": {
"version": "4.14.191",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
"integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ=="
},
"node_modules/@types/marked": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.8.tgz",
@ -2578,8 +2585,7 @@
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.merge": {
"version": "4.6.2",

View file

@ -11,8 +11,10 @@
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
},
"dependencies": {
"@types/lodash": "^4.14.191",
"@types/marked": "^4.0.8",
"axios": "^1.3.2",
"lodash": "^4.17.21",
"marked": "^4.2.12",
"pinia": "^2.0.28",
"sass": "^1.58.0",

23
public/jdr/erratum.json Normal file
View file

@ -0,0 +1,23 @@
{
"name": "Règles de bases",
"sidebar": [
{
"id": 50,
"title": "Magie et surnaturel",
"links": [
{"title": "Métaphysique", "path": "rules/magie/eclat"},
{"title": "Anomie", "path": "rules/magie/anomie"}
]
},
{
"id": 60,
"title": "Divers",
"links": [
{"title": "Malédiction antiques", "path": "rules/erratum/maledictions"}
]
}
],
"hideLinks":[
{ "menu":10, "link":"rules/personnages/niveaux" }
]
}

View file

@ -66,16 +66,20 @@
"title": "Magie et surnaturel",
"links": [
{"title": "Éclat", "path": "rules/magie/eclat"},
{"title": "Éléments", "path": "rules/magie/eclat"},
{"title": "Métaphysique", "path": "rules/magie/eclat"},
{"title": "Anomie", "path": "rules/magie/anomie"}
{"title": "Éléments", "path": "rules/magie/eclat"}
]
},
{
"id": 60,
"title": "Divers",
"links": [
{"title": "Afflictions et effets", "path": "rules/divers/afflictions"},
{"title": "Afflictions et effets", "path": "rules/divers/afflictions"}
]
},
{
"id": 70,
"title": "",
"links": [
{"title": "Jeu de plateau", "path": "rules/bases/plateau"}
]
}

View file

@ -27,6 +27,7 @@ const linkBase = computed(() => {
:to="`/${linkBase}/${link.path}`"
class="menu-item"
:replace="true"
v-if="!link.isHidden"
>{{ link.title }}</router-link
>
</li>

View file

@ -4,6 +4,7 @@ import type PelicanConfig from "@/types/PelicanConfig";
import type LinkList from "@/types/LinkList";
import type JdrConfig from "@/types/JdrConfig";
import axios from "axios";
import { cloneDeep } from "lodash";
export const useConfigStore = defineStore("config", () => {
const config = ref(null as PelicanConfig | null);
@ -12,11 +13,31 @@ export const useConfigStore = defineStore("config", () => {
const sidebar = ref([{ id: 0, links: [] }] as LinkList[]);
function computeSidebar() {
return config.value?.sidebar ?? [{ id: 0, links: [] }];
const baseSideBar = cloneDeep(config.value?.sidebar ?? []);
for (const cat of jdrConfig.value?.sidebar ?? []) {
const sidebarItem = baseSideBar.find((a) => a.id === cat.id);
if (sidebarItem) {
sidebarItem.links = sidebarItem.links.concat(cat.links);
} else {
baseSideBar.push(cat);
}
}
for (const hideLink of jdrConfig.value?.hideLinks ?? []) {
const sidebarItem = baseSideBar.find((a) => a.id === hideLink.menu);
if (sidebarItem) {
const link = sidebarItem.links.find((a) => a.path === hideLink.link);
if (link) {
link.isHidden = true;
}
}
}
return baseSideBar;
}
function setConfig(newConfig: PelicanConfig) {
config.value = newConfig;
sidebar.value = computeSidebar();
}
function loadJdr(newJdr: string) {
@ -43,7 +64,9 @@ export const useConfigStore = defineStore("config", () => {
if (isJdrLoaded()) {
return sidebar.value;
} else {
return config.value?.jdr ?? [{ id: 0, links: [] }];
return (
config.value?.jdr?.sort((a, b) => a.id - b.id) ?? [{ id: 0, links: [] }]
);
}
}

4
src/types/HideLink.ts Normal file
View file

@ -0,0 +1,4 @@
export default interface HideLink {
menu: number;
link: string;
}

View file

@ -1,6 +1,8 @@
import type HideLink from "./HideLink";
import type LinkList from "./LinkList";
export default interface JdrConfig {
name: string;
sidebar: LinkList[];
hideLinks: HideLink[];
}

View file

@ -1,4 +1,5 @@
export default interface Link {
title: string;
path: string;
isHidden?: boolean;
}