merged auth stuff

This commit is contained in:
Carter 2025-07-18 12:01:20 -06:00
commit 41cb2dc7e4
22 changed files with 505 additions and 75 deletions

View file

@ -18,7 +18,6 @@ import {
ImageList,
ImageListItem,
InputLabel,
lighten,
ListItemIcon,
ListItemText,
Menu,
@ -26,8 +25,6 @@ import {
Select,
Skeleton,
Theme,
ToggleButton,
ToggleButtonGroup,
Typography,
useTheme,
} from "@mui/material";
@ -61,7 +58,8 @@ import {
// useBinYardAPI,
useGlobalState,
useInteractionsAPI,
useSnackbar
useSnackbar,
useTeamAPI
} from "providers";
import React, { SetStateAction, useCallback, useEffect, useState } from "react";
// import { getThemeType } from "theme";
@ -72,7 +70,7 @@ import ObjectTable from "objects/ObjectTable";
import ResponsiveDialog from "common/ResponsiveDialog";
import { describeMeasurement } from "pbHelpers/MeasurementDescriber";
import { green, yellow } from "@mui/material/colors";
import { makeStyles, styled } from "@mui/styles";
import { makeStyles } from "@mui/styles";
import { useNavigate } from "react-router-dom";
import BinSettings from "bin/BinSettings";
import AddBinFab from "bin/AddBinFab";
@ -82,6 +80,7 @@ import GrainBagSettings from "grainBag/grainBagSettings";
import GrainBagList from "grainBag/grainBagList";
import BinYards from "bin/BinYards";
import ButtonGroup from "common/ButtonGroup";
import TeamDialog from "teams/TeamDialog";
// import { useHistory } from "react-router";
const useStyles = makeStyles((theme: Theme) => {
@ -141,11 +140,13 @@ export default function Bins(props: Props) {
const classes = useStyles();
const isMobile = useMobile();
const binAPI = useBinAPI();
const teamAPI = useTeamAPI();
// const binyardAPI = useBinYardAPI();
const interactionsAPI = useInteractionsAPI();
const [{ user, as }] = useGlobalState();
const [allLoading, setAllLoading] = useState(false);
const [binsLoading, setBinsLoading] = useState(false);
const [doneLoadingPage, setDoneLoadingPage] = useState(false)
const [addBinOpen, setAddBinOpen] = useState(false);
const [paginatedBins, setPaginatedBins] = useState<PaginatedBins>({
bins: [],
@ -188,13 +189,16 @@ export default function Bins(props: Props) {
const [qrKeyList, setQrKeyList] = useState<QrCodeKey[]>([]);
const [totalFanControllers, setTotalFanControllers] = useState(0);
const [totalFanControllersOn, setTotalFanControllersOn] = useState(0);
const [yardsLoading, setYardsLoading] = useState(false);
// const [yardsLoading, setYardsLoading] = useState(false);
const [openAddAlerts, setOpenAddAlerts] = useState(false);
const [alertBins, setAlertBins] = useState<Bin[]>([]);
const { openSnack } = useSnackbar();
// const history = useHistory();
const navigate = useNavigate()
const [cardValDisplay, setCardValDisplay] = useState<"high" | "low" | "average">("average");
const [teamsDialog, setTeamsDialog] = useState(false)
// const [scrollTranslations, setScrollTranslations] = useState({
// bins: 0,
// empty: 0,
@ -252,6 +256,18 @@ export default function Bins(props: Props) {
// selected: {}
// }));
useEffect(() => {
if (doneLoadingPage && grainBins.length < 1 && grainBags.length < 1) {
teamAPI.listTeams(1, 0).then(resp => {
// console.log(resp.data.teams)
if (resp.data.teams.length > 0) {
// console.log("should?")
setTeamsDialog(true)
}
})
}
}, [doneLoadingPage, grainBins, grainBags])
useEffect(() => {
let ebt = sessionStorage.getItem("expandBinTotal");
if (ebt === "true") {
@ -400,7 +416,7 @@ export default function Bins(props: Props) {
const bags = resp.data.bags.map(b => GrainBag.create(b));
setGrainBags(bags);
})
.catch(err => {
.catch(() => {
setPaginatedBins({ bins: [], binsOffset: 0, binsTotal: 0 });
setBinMetrics(pond.BinMetrics.create());
setYards([]);
@ -408,6 +424,7 @@ export default function Bins(props: Props) {
.finally(() => {
setAllLoading(false);
setBinsLoading(false);
setDoneLoadingPage(true)
});
}, [binAPI, yardFilter, order, orderBy, as, loadingAs, loadingFilter]); // eslint-disable-line react-hooks/exhaustive-deps
@ -454,7 +471,7 @@ export default function Bins(props: Props) {
setFertilizerBins([...fert]);
setQrKeyList([...newKeyList]);
})
.catch(err => {
.catch(() => {
setPaginatedBins({ bins: [], binsOffset: 0, binsTotal: 0 });
})
.finally(() => {
@ -462,13 +479,13 @@ export default function Bins(props: Props) {
});
};
const searchYards = (
search?: string,
limit?: number,
offset?: number,
order?: "asc" | "desc"
) => {
setYardsLoading(true);
// const searchYards = (
// search?: string,
// limit?: number,
// offset?: number,
// order?: "asc" | "desc"
// ) => {
// setYardsLoading(true);
// binyardAPI.listBinYards(limit ?? binsLimit, offset ?? 0, order, "name", search).then(resp => {
// let y: pond.BinYardSettings[] = [];
// let p: Dictionary<pond.Permission[]> = {};
@ -493,7 +510,7 @@ export default function Bins(props: Props) {
// }
// setYardsLoading(false);
// });
};
// };
useEffect(() => {
loadBins();
@ -515,7 +532,7 @@ export default function Bins(props: Props) {
}
const duplicateBin = (bin: Bin) => {
binAPI.addBin(bin.settings, as).then(resp => {
binAPI.addBin(bin.settings, as).then(() => {
loadMoreBins(contentFilter);
});
};
@ -556,7 +573,7 @@ export default function Bins(props: Props) {
.then(resp => {
openSnack("Successfully added " + resp.data.numAlertsSet + " alerts");
})
.catch(err => {
.catch(() => {
console.log("errors found");
});
};
@ -1080,7 +1097,7 @@ export default function Bins(props: Props) {
control={
<Checkbox
checked={displayGrain}
onChange={(e, checked) => {
onChange={(_, checked) => {
setDisplayGrain(checked);
}}
/>
@ -1093,7 +1110,7 @@ export default function Bins(props: Props) {
control={
<Checkbox
checked={displayFert}
onChange={(e, checked) => {
onChange={(_, checked) => {
setDisplayFert(checked);
}}
/>
@ -1106,7 +1123,7 @@ export default function Bins(props: Props) {
control={
<Checkbox
checked={displayEmpty}
onChange={(e, checked) => {
onChange={(_, checked) => {
setDisplayEmpty(checked);
}}
/>
@ -1392,15 +1409,17 @@ export default function Bins(props: Props) {
{addALertsDialog()}
<BinYards
yards={yards}
yardsLoading={yardsLoading}
// yardsLoading={yardsLoading}
yardsLoading={false}
yardPerms={yardPermissions}
showTabs={!props.insert}
setYardFilter={setYardFilter}
bins={paginatedBins.bins}
loadBins={loadBins}
loadYards={(search, limit, offset) => {
searchYards(search, limit, offset);
}}
// loadYards={(search, limit, offset) => {
// searchYards(search, limit, offset);
// }}
loadYards={() => {}}
grainBags={grainBags}
setShowing={(val: "all" | "bins" | "bags") => {
setShowing(val);
@ -1473,6 +1492,13 @@ export default function Bins(props: Props) {
/>
{binMenu()}
<AddBinFab onClick={() => setAddBinOpen(true)} pulse={binsTotal < 1 && !allLoading} />
<TeamDialog
open={teamsDialog}
setOpen={setTeamsDialog}
title={"You have teams!"}
info={"Looks like you don't have any bins, but are a part of at least one team. If you want to see your teams bins, please select your team and choose the option \"View as team\""}
hideKey={"bins-teams-notification-dialog"}
/>
</Box>
);
};