105 lines
2.8 KiB
TypeScript
105 lines
2.8 KiB
TypeScript
import { liveQuery } from 'dexie';
|
|
import { useEffect, useState } from 'react';
|
|
import { useDatabase } from '../context/DBProvider';
|
|
import { Area } from '../models/Area';
|
|
import { Category } from '../models/Category';
|
|
import { PickItem } from '../models/PickItem';
|
|
import { PickList } from '../models/PickList';
|
|
import { Product } from '../models/Product';
|
|
|
|
export const useProducts = () => {
|
|
const db = useDatabase();
|
|
const [products, setProducts] = useState<Product[]>([]);
|
|
|
|
useEffect(() => {
|
|
const subscription = liveQuery(() => db.products.toArray()).subscribe({
|
|
next: setProducts,
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db]);
|
|
return products;
|
|
};
|
|
|
|
export const useProduct = (id?: string) => {
|
|
const db = useDatabase();
|
|
const [product, setProduct] = useState<Product | undefined>();
|
|
|
|
useEffect(() => {
|
|
if (!id) return;
|
|
const subscription = liveQuery(() => db.products.get(id)).subscribe({
|
|
next: (value) => setProduct(value ?? undefined),
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db, id]);
|
|
return product;
|
|
};
|
|
|
|
export const useAreas = () => {
|
|
const db = useDatabase();
|
|
const [areas, setAreas] = useState<Area[]>([]);
|
|
|
|
useEffect(() => {
|
|
const subscription = liveQuery(() => db.areas.toArray()).subscribe({
|
|
next: setAreas,
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db]);
|
|
return areas;
|
|
};
|
|
|
|
export const useCategories = () => {
|
|
const db = useDatabase();
|
|
const [categories, setCategories] = useState<Category[]>([]);
|
|
|
|
useEffect(() => {
|
|
const subscription = liveQuery(() => db.categories.toArray()).subscribe({
|
|
next: setCategories,
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db]);
|
|
return categories;
|
|
};
|
|
|
|
export const usePickLists = () => {
|
|
const db = useDatabase();
|
|
const [lists, setLists] = useState<PickList[]>([]);
|
|
|
|
useEffect(() => {
|
|
const subscription = liveQuery(() => db.pickLists.toArray()).subscribe({
|
|
next: setLists,
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db]);
|
|
return lists;
|
|
};
|
|
|
|
export const usePickList = (id?: string) => {
|
|
const db = useDatabase();
|
|
const [list, setList] = useState<PickList | undefined>();
|
|
|
|
useEffect(() => {
|
|
if (!id) return;
|
|
const subscription = liveQuery(() => db.pickLists.get(id)).subscribe({
|
|
next: (value) => setList(value ?? undefined),
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db, id]);
|
|
return list;
|
|
};
|
|
|
|
export const usePickItems = (pickListId?: string) => {
|
|
const db = useDatabase();
|
|
const [items, setItems] = useState<PickItem[]>([]);
|
|
|
|
useEffect(() => {
|
|
if (!pickListId) return undefined;
|
|
const subscription = liveQuery(() =>
|
|
db.pickItems.where('pick_list_id').equals(pickListId).toArray(),
|
|
).subscribe({
|
|
next: setItems,
|
|
});
|
|
return () => subscription.unsubscribe();
|
|
}, [db, pickListId]);
|
|
return items;
|
|
};
|