front-hub/src/stores/tariffs.ts

47 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-06-16 20:09:56 +00:00
import { Tariff } from "@root/model/tariff";
import { create } from "zustand";
import { devtools } from "zustand/middleware";
interface TariffStore {
tariffs: Tariff[];
}
export const useTariffStore = create<TariffStore>()(
devtools(
(set, get) => ({
tariffs: [],
}),
{
2023-06-30 15:35:31 +00:00
name: "Tariffs",
2023-06-16 20:09:56 +00:00
enabled: process.env.NODE_ENV === "development",
2023-06-30 15:35:31 +00:00
trace: true,
2023-06-16 20:09:56 +00:00
}
)
);
2023-06-30 15:35:31 +00:00
export const updateTariffs = (tariffs: TariffStore["tariffs"]) => useTariffStore.setState(
state => {
const tariffMap: Record<string, Tariff> = {};
[...state.tariffs, ...tariffs].forEach(tariff => tariffMap[tariff._id] = tariff);
const sortedTariffs = Object.values(tariffMap).sort(sortTariffsByCreatedAt);
return { tariffs: sortedTariffs };
},
false,
{
type: "updateTariffs",
tariffsLength: tariffs.length,
}
);
function sortTariffsByCreatedAt(tariff1: Tariff, tariff2: Tariff) {
if (!tariff1.createdAt || !tariff2.createdAt) throw new Error("Trying to sort tariffs without createdAt field");
const date1 = new Date(tariff1.createdAt).getTime();
const date2 = new Date(tariff2.createdAt).getTime();
return date1 - date2;
}