Merge branch 'access_object' into dev_environment

This commit is contained in:
Carter 2025-10-21 12:30:35 -06:00
commit deb3fabd45
12 changed files with 72 additions and 43 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -22,6 +22,7 @@ interface Props {
loadMore?: () => void;
//startingTranslate: number;
valDisplay?: "high" | "low" | "average";
insert?: boolean
}
const useStyles = makeStyles((_theme) => {
@ -39,7 +40,7 @@ const useStyles = makeStyles((_theme) => {
});
export default function BinsList(props: Props) {
const { bins, duplicateBin, title, gridView, loadMore, valDisplay } = props;
const { bins, duplicateBin, title, gridView, loadMore, valDisplay, insert } = props;
const classes = useStyles();
// const history = useHistory();
const navigate = useNavigate()
@ -114,7 +115,12 @@ export default function BinsList(props: Props) {
{bins.map((b, i) =>
(
<Grid
size={{
size={insert ? {
xs: 6,
sm: 6,
md: 4,
lg: 3,
} : {
xs: 6,
sm: 4,
md: 3,

View file

@ -316,6 +316,7 @@ export default function BinyardDisplay(props: Props) {
<Grid size={12}>
<BinsList
gridView
insert
valDisplay="average"
bins={grainBins}
duplicateBin={duplicateBin}
@ -332,6 +333,7 @@ export default function BinyardDisplay(props: Props) {
<Grid size={12}>
<BinsList
gridView
insert
valDisplay="average"
bins={fertBins}
duplicateBin={duplicateBin}
@ -348,6 +350,7 @@ export default function BinyardDisplay(props: Props) {
<Grid size={12}>
<BinsList
gridView
insert
valDisplay="average"
bins={emptyBins}
duplicateBin={duplicateBin}

View file

@ -8,6 +8,7 @@ import {
MenuItem,
OutlinedInput,
Select,
TextField,
Theme
} from "@mui/material";
import moment, { Moment } from "moment";
@ -16,6 +17,7 @@ import ReactDOM from "react-dom";
import { DateRangePreset, SetDefaultPreset } from "./DateRange";
import ResponsiveDialog from "common/ResponsiveDialog";
import { withStyles, WithStyles } from "@mui/styles";
import { cloneDeep } from "lodash";
const styles = (_theme: Theme) => createStyles({});
@ -249,18 +251,30 @@ class DateSelect extends React.Component<Props, State> {
onClose={this.closeDateRangeDialog}
aria-labelledby="date-range-dialog">
<DialogContent>
{/* <StaticDateRangePicker
disableFuture
value={dateRange}
onChange={date => this.updateDateRange(date)}
renderInput={(startProps, endProps) => (
<React.Fragment>
<TextField {...startProps} />
<DateRangeDelimiter> to </DateRangeDelimiter>
<TextField {...endProps} />
</React.Fragment>
)}
/> */}
<TextField
fullWidth
margin="normal"
type="date"
label="Start Time"
value={dateRange[0]?.format("YYYY-MM-DD")}
onChange={e => {
let range = cloneDeep(dateRange)
range[0] = moment(e.target.value)
this.updateDateRange(range)
}}
/>
<TextField
fullWidth
margin="normal"
type="date"
label="End Time"
value={dateRange[1]?.format("YYYY-MM-DD")}
onChange={e => {
let range = cloneDeep(dateRange)
range[1] = moment(e.target.value)
this.updateDateRange(range)
}}
/>
</DialogContent>
<DialogActions>
<Button onClick={this.closeDateRangeDialog} color="primary">

View file

@ -42,11 +42,11 @@ const featureVersions: Map<string, FeatureVersionByPlatform> = new Map([
v2Cell: "N/A",
v2WifiS3: "N/A",
v2CellS3: "N/A",
v2CellBlack: "2.1.6",
v2CellBlack: "2.1.7",
v2CellGreen: "N/A",
v2WifiBlue: "2.1.6",
v2CellBlue: "2.1.6",
v2EthBlue: "2.1.6"
v2WifiBlue: "2.1.7",
v2CellBlue: "2.1.7",
v2EthBlue: "2.1.7"
}
]
]);

View file

@ -40,7 +40,7 @@ export default function Heaters() {
.listObjectHeatersPageData(pageSize, tablePage * pageSize, undefined, undefined, searchText, as)
.then(resp => {
setTotal(resp.data.total)
setHeaters(resp.data.heaterData);
setHeaters(resp.data.heaterData ?? []);
});
}, [objectHeaterAPI, as, pageSize, tablePage, searchText]);

View file

@ -108,7 +108,8 @@ export default function Users() {
"remove-devices",
"copy-token",
"recluse",
"pause-data"
"pause-data",
"access-object"
].sort();
const features = [
"admin",

View file

@ -90,8 +90,7 @@ export default function InteractionProvider(props: PropsWithChildren<Props>) {
) => {
const view = otherTeam ? otherTeam : as
let url = pondURL(
"/interactions/forComponents/" +
"?componentIds=" +
"/interactions/forComponents?componentIds=" +
fullComponentLocations.toString() +
(view ? "&as=" + view : "")
)

View file

@ -119,7 +119,7 @@ export default function TeamProvider(props: PropsWithChildren<Props>) {
prefixSearch?: string,
) => {
//let asText = team ? "&as=" + team.key() : "";
const view = otherTeam ? otherTeam : as
const view = otherTeam ? otherTeam : (as.length > 0 ? as : undefined)
let url = pondURL(
"/teams" +
"?limit=" +

View file

@ -138,6 +138,7 @@ export default function TaskViewer(props: ViewProps) {
openDialog();
};
const loadMultitask = useCallback(() => {
if (!loadKeys) return;
if (loadKeys.length > 0) {
@ -146,11 +147,13 @@ export default function TaskViewer(props: ViewProps) {
taskAPI
.getMultiTasks(loadKeys, as)
.then(resp => {
if(resp.data.tasks){
resp.data.tasks.forEach(task => {
if (task.settings) {
temp.set(task.key, Task.any(task));
}
});
}
setTasks(temp);
setLoaded(true);
})
@ -167,11 +170,13 @@ export default function TaskViewer(props: ViewProps) {
taskAPI
.listTasks(50, 0, "asc", "start", undefined, undefined, as, prevMonth, nextMonth)
.then(resp => {
if(resp.data.tasks){
resp.data.tasks.forEach(task => {
if (task.settings) {
temp.set(task.key, Task.any(task));
}
});
}
setTasks(temp);
setLoaded(true);
})

View file

@ -266,7 +266,7 @@ export default function UserMenu() {
</MenuItem>
)}
<Divider />
{hasAdmin && (
{(hasAdmin || user.allowedTo("access-object")) && (
<Tooltip title="Access Object">
<MenuItem onClick={() => openAccessObject()} aria-label="Access Object" dense>
<ListItemIcon>
@ -276,7 +276,7 @@ export default function UserMenu() {
</MenuItem>
</Tooltip>
)}
<Divider />
{(hasAdmin || user.allowedTo("access-object")) && <Divider /> }
<MenuItem onClick={handleLogout} aria-label="Sign Out" dense>
<ListItemIcon>
<ExitToApp className={classes.red} />

View file

@ -17,6 +17,7 @@ import FeatureCard from "./FeatureCard";
//import { ImgIcon } from "common/ImgIcon";
//images to import for the image in the card for the feature make sure to have a 2:1 aspect ratio to keep the cards symmetrical
import FeatureImageTest from "assets/marketplaceImages/VisualFarmMPImage.png";
import LibraCartImage from "assets/marketplaceImages/Libra_Cart_temp.jpg";
// export interface FAQ {
// question: string;
@ -62,14 +63,14 @@ const agFeatureList: ProductDetails[] = [
// bulletPoints: ["bullet one", "bullet two"],
// questions: [],
},
// {
// featureName: "libra-cart",
// featureLogo: <LibraCartIcon />,
// featureCost: 0,
// cardImage: FeatureImageTest,
// featureTitle: "Libra Cart",
// longDescription: "Integrate with Libra Cart to bring your data into our platform"
// }
{
featureName: "libra-cart",
featureLogo: <LibraCartIcon />,
featureCost: 0,
cardImage: LibraCartImage,
featureTitle: "Libra Cart",
longDescription: "Integrate with Libra Cart to bring your data into our platform"
}
];
// const constructionFeatureList: ProductDetails[] = []