AK-21/Graphite-Industrial-Intelligence
0
1import { addDatabaseChangeListener } from "expo-sqlite";2import { useEffect, useState } from "react";3import { is } from "../entity.js";4import { SQL } from "../sql/sql.js";5import { getTableConfig, getViewConfig, SQLiteTable, SQLiteView } from "../sqlite-core/index.js";6import { SQLiteRelationalQuery } from "../sqlite-core/query-builders/query.js";7import { Subquery } from "../subquery.js";8const useLiveQuery = (query, deps = []) => {9 const [data, setData] = useState(10 is(query, SQLiteRelationalQuery) && query.mode === "first" ? void 0 : []11 );12 const [error, setError] = useState();13 const [updatedAt, setUpdatedAt] = useState();14 useEffect(() => {15 const entity = is(query, SQLiteRelationalQuery) ? query.table : query.config.table;16 if (is(entity, Subquery) || is(entity, SQL)) {17 setError(new Error("Selecting from subqueries and SQL are not supported in useLiveQuery"));18 return;19 }20 let listener;21 const handleData = (data2) => {22 setData(data2);23 setUpdatedAt(/* @__PURE__ */ new Date());24 };25 query.then(handleData).catch(setError);26 if (is(entity, SQLiteTable) || is(entity, SQLiteView)) {27 const config = is(entity, SQLiteTable) ? getTableConfig(entity) : getViewConfig(entity);28 listener = addDatabaseChangeListener(({ tableName }) => {29 if (config.name === tableName) {30 query.then(handleData).catch(setError);31 }32 });33 }34 return () => {35 listener?.remove();36 };37 }, deps);38 return {39 data,40 error,41 updatedAt42 };43};44export {45 useLiveQuery46};47//# sourceMappingURL=query.js.map