{{
gatheringNode.isActive(eorzeaTime) ? 'Active' : prettyTimer(gatheringNode.getSecondsToNextActiveTime(eorzeaTime))
diff --git a/src/components/SortedNodeList.vue b/src/components/SortedNodeList.vue
index 00ef0c5..0f97c65 100644
--- a/src/components/SortedNodeList.vue
+++ b/src/components/SortedNodeList.vue
@@ -16,6 +16,7 @@ import EorzeaTime from "../util/EorzeaTime";
import Node from "@/entities/Node";
import GatheringNode from "@/components/GatheringNode.vue";
import Zone from "@/entities/Zone";
+import Filters from "@/util/Filters";
export default defineComponent(
{
@@ -37,10 +38,10 @@ export default defineComponent(
},
watch: {
nodes: {
- immediate: true,
- handler() {
- this.displayNodes = this.nodes;
- }
+ handler(newNodes: Node[]) {
+ this.filterNodes(newNodes);
+ },
+ deep: true
},
displayNodes: {
handler() {
@@ -48,7 +49,6 @@ export default defineComponent(
}
},
eorzeaTime: {
- immediate: true,
handler(newValue, oldValue) {
if (oldValue === undefined) return;
if (newValue?.getMinutes() === oldValue?.getMinutes()) return;
@@ -68,10 +68,37 @@ export default defineComponent(
return aSeconds - bSeconds;
});
},
+ filterNodes(nodes: Node[] = []) {
+ let filters: Filters | null = null;
+ const filtersString = window.localStorage.getItem("filters");
+ if (filtersString === null) {
+ this.displayNodes = this.nodes;
+ return;
+ }
+ const parsedFilters = JSON.parse(filtersString);
+ filters = new Filters(parsedFilters);
+
+ this.displayNodes = nodes.filter((node) => {
+ let shouldDisplay = false;
+
+ if (filters && !filters.jobs.includes(node.job)) {
+ return false;
+ }
+
+ for (const item of node.items) {
+ if (filters && item.level >= filters.minLevel && item.level <= filters.maxLevel) {
+ shouldDisplay = true;
+ break;
+ }
+ }
+
+ return shouldDisplay;
+ });
+ },
},
- async mounted() {
- this.displayNodes = this.nodes;
- this.sortListByTime();
+ mounted() {
+ this.filterNodes(this.nodes);
+
},
}
);
diff --git a/src/util/Filters.ts b/src/util/Filters.ts
new file mode 100644
index 0000000..4b4635c
--- /dev/null
+++ b/src/util/Filters.ts
@@ -0,0 +1,28 @@
+import {Job, jobFromString} from "@/enums/Job";
+
+export default class Filters {
+
+ minLevel: number;
+ maxLevel: number;
+ jobs: Job[] = [];
+
+ constructor(
+ data?: {
+ minLevel?: number,
+ maxLevel?: number,
+ jobs?: string[],
+ },
+ ) {
+ this.minLevel = data?.minLevel || 1;
+ this.maxLevel = data?.maxLevel || 100;
+ const jobData = data?.jobs || [];
+
+ for (const job of jobData) {
+ const parsedJob = jobFromString(job);
+ if (!parsedJob) continue;
+ this.jobs.push(parsedJob);
+ }
+
+ }
+
+}