feat(lstv2 move): moved lstv2 into this app to keep them combined and easier to maintain

This commit is contained in:
2025-09-19 22:22:05 -05:00
parent caf2315191
commit e4477402ad
847 changed files with 165801 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
import {User} from "@/types/users";
import axios from "axios";
import {create} from "zustand";
export type SessionState = {
user: User | null;
token: string | null;
setSession: (user: User | null, token: string | null) => void;
clearSession: () => void;
};
export const useSessionStore = create<SessionState>((set) => {
// Initialize token from localStorage, but user remains in memory only
const storedToken = localStorage.getItem("auth_token");
return {
user: null, // User is NOT stored in localStorage
token: storedToken || null,
setSession: async (user: any, token) => {
if (token) {
localStorage.setItem("auth_token", token);
const response = await axios.get("/api/auth/getuseraccess", {
headers: {Authorization: `Bearer ${token}`},
});
const data = response.data; //await response.json();
user = {...user, roles: data.data};
} else {
localStorage.removeItem("auth_token");
}
//console.log("Setting session:", {user, token});
set({user, token});
},
clearSession: () => {
localStorage.removeItem("auth_token");
set({user: null, token: null});
},
};
});
export type SessionType = ReturnType<typeof useSessionStore>;

View File

@@ -0,0 +1,49 @@
import { create } from "zustand";
import { devtools, persist } from "zustand/middleware";
// interface CardSettings {
// daysSinceLast?: number;
// rowType?: string;
// }
export interface Card {
name: string;
rowType: string;
age: string;
active: boolean;
}
interface CardStore {
cards: Card[]; // Array of card objects
addCard: (card: Card) => void;
updateCard: (name: string, updatedCard: Partial<Card>) => void;
removeCard: (name: string) => void;
}
export const useCardStore = create<CardStore>()(
devtools(
persist<CardStore>(
(set) => ({
cards: [],
addCard: (card) =>
set((state) => ({ cards: [...state.cards, card] })),
updateCard: (name, updatedCard) =>
set((state) => ({
cards: state.cards.map((card) =>
card.name === name
? { ...card, ...updatedCard }
: card
),
})),
removeCard: (name) =>
set((state) => ({
cards: state.cards.filter((card) => card.name !== name),
})),
}),
{ name: "cards" }
)
)
);

View File

@@ -0,0 +1,38 @@
import { create } from "zustand";
import { Modules } from "@/types/modules";
import axios from "axios";
interface SettingState {
userRoles: Modules[];
fetchUserRoles: () => Promise<void>;
setUserRoles: (userRoles: Modules[]) => void;
}
interface FetchModulesResponse {
data: Modules[];
}
export const useGetUserRoles = create<SettingState>()((set) => ({
userRoles: [],
setUserRoles: (userRoles) => set({ userRoles }),
fetchUserRoles: async () => {
try {
//const response = await axios.get<{data: Setting[]}>(`${process.env.NEXT_PUBLIC_URL}/api/settings/client`);
const token = localStorage.getItem("auth_token");
if (token) {
const response = await axios.get("/api/auth/getuseraccess", {
headers: { Authorization: `Bearer ${token}` },
});
const data: FetchModulesResponse = response.data; //await response.json();
//console.log(data);
set({ userRoles: data.data });
} else {
//console.log(data);
set({ userRoles: [] });
}
} catch (error) {
console.error("Failed to fetch settings:", error);
}
},
}));

View File

@@ -0,0 +1,30 @@
import {Modules} from "@/types/modules";
import axios from "axios";
import {create} from "zustand";
interface SettingState {
modules: Modules[];
fetchModules: () => Promise<void>;
setModules: (modules: Modules[]) => void;
}
interface FetchModulesResponse {
data: Modules[];
}
export const useModuleStore = create<SettingState>()((set) => ({
modules: [],
setModules: (modules) => set({modules}),
fetchModules: async () => {
try {
//const response = await axios.get<{data: Setting[]}>(`${process.env.NEXT_PUBLIC_URL}/api/settings/client`);
const response = await axios.get(`/api/server/modules`, {});
const data: FetchModulesResponse = response.data; //await response.json();
//console.log(data);
set({modules: data.data});
} catch (error) {
console.error("Failed to fetch settings:", error);
set({modules: []});
}
},
}));

View File

@@ -0,0 +1,28 @@
import axios from "axios";
import { create } from "zustand";
interface SettingState {
settings: any[];
fetchSettings: () => Promise<void>;
setSettings: (settings: any[]) => void;
}
interface FetchModulesResponse {
data: any[];
}
export const useSettingStore = create<SettingState>()((set) => ({
settings: [],
setSettings: (settings) => set({ settings }),
fetchSettings: async () => {
try {
//const response = await axios.get<{data: Setting[]}>(`${process.env.NEXT_PUBLIC_URL}/api/settings/client`);
const response = await axios.get(`/api/server/settings`, {});
const data: FetchModulesResponse = response.data; //await response.json();
//console.log(data);
set({ settings: data.data });
} catch (error) {
console.error("Failed to fetch settings:", error);
set({ settings: [] });
}
},
}));

View File

@@ -0,0 +1,30 @@
import { SubModules } from "@/types/modules";
import axios from "axios";
import { create } from "zustand";
interface SettingState {
subModules: SubModules[];
fetchSubModules: () => Promise<void>;
setSubModules: (modules: SubModules[]) => void;
}
interface FetchModulesResponse {
data: SubModules[];
}
export const useSubModuleStore = create<SettingState>()((set) => ({
subModules: [],
setSubModules: (subModules) => set({ subModules }),
fetchSubModules: async () => {
try {
//const response = await axios.get<{data: Setting[]}>(`${process.env.NEXT_PUBLIC_URL}/api/settings/client`);
const response = await axios.get(`/api/server/submodules`, {});
const data: FetchModulesResponse = response.data; //await response.json();
//console.log(data);
set({ subModules: data.data });
} catch (error) {
console.error("Failed to fetch settings:", error);
set({ subModules: [] });
}
},
}));

View File

@@ -0,0 +1,6 @@
import {clsx, type ClassValue} from "clsx";
import {twMerge} from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}