merged sendgrid whitelabel

This commit is contained in:
Carter 2026-06-11 13:58:37 -06:00
commit 8c45dbd00e
4 changed files with 508 additions and 506 deletions

978
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -56,7 +56,7 @@
"mui-tel-input": "^7.0.0",
"notistack": "^3.0.1",
"openweathermap-ts": "^1.2.10",
"protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#dev",
"protobuf-ts": "git+https://gitlab+deploy-token-50627:hv8mB4WkyvtjBpJKU1rN@gitlab.com/brandx/protobuf-ts.git#sendgrid_whitelabel",
"query-string": "^9.2.1",
"react": "^18.3.1",
"react-beautiful-dnd": "^13.1.1",

View file

@ -7,12 +7,14 @@ import NavigationContainer from '../navigation/NavigationContainer'
import { GlobalState, GlobalStateAction, StateProvider } from '../providers/StateContainer'
import { User } from '../models/user'
import { Team } from '../models/team'
import { getWhitelabel } from '../services/whiteLabel'
import { makeStyles } from '@mui/styles'
import { CssBaseline, Theme } from '@mui/material'
import { AppThemeProvider } from 'theme/AppThemeProvider'
import HTTPProvider from 'providers/http'
import { useMobile, useSnackbar } from 'hooks'
import { initCrisp, isCrispEnabled } from '../chat/CrispChat'
import { useTeamAPI } from '../providers/pond/teamAPI'
// import FirmwareLoader from './FirmwareLoader'
const reducer = (state: GlobalState, action: GlobalStateAction): GlobalState => {
@ -61,6 +63,7 @@ export default function UserWrapper(props: Props) {
const { token } = props;
const [loading, setLoading] = useState(false)
const userAPI = useUserAPI();
const teamAPI = useTeamAPI();
const classes = useStyles();
const hasFetched = useRef(false);
const [global, setGlobal] = useState<undefined | GlobalState>(undefined)
@ -81,9 +84,22 @@ export default function UserWrapper(props: Props) {
if (hasFetched.current) return;
setLoading(true)
userAPI.getUserWithTeam(user_id).then(resp => {
const loadedUser = resp.data.user ? User.create(resp.data.user) : User.create();
const loadedTeam = resp.data.team ? Team.create(resp.data.team) : Team.create();
const currentSlug = getWhitelabel().slug;
if (!loadedUser.empty() && loadedUser.settings.whitelabel !== currentSlug) {
loadedUser.settings.whitelabel = currentSlug;
userAPI.updateUser(loadedUser.id(), loadedUser.protobuf()).catch(() => {});
}
if (!loadedTeam.empty() && loadedTeam.settings.whitelabel === "") {
loadedTeam.settings.whitelabel = currentSlug;
teamAPI.updateTeam(loadedTeam.key(), loadedTeam.settings).catch(() => {});
}
setGlobal({
user: resp.data.user ? User.create(resp.data.user) : User.create(),
team: resp.data.team ? Team.create(resp.data.team) : Team.create(),
user: loadedUser,
team: loadedTeam,
as: resp.data.user?.settings?.useTeam === true ? resp.data.user.settings.defaultTeam : "",
showErrors: false,
userTeamPermissions: [],

View file

@ -37,6 +37,7 @@ export default function TeamSettings(props: Props) {
const [loading, setLoading] = useState<boolean>(false);
const [nameField, setNameField] = useState<string>("");
const [infoField, setInfoField] = useState<string>("");
const [whitelabelField, setWhitelabelField] = useState<string>("");
const [url, setUrl] = useState<string>("");
const snackbar = useSnackbar();
const [tab, setTab] = useState(0);
@ -55,6 +56,7 @@ export default function TeamSettings(props: Props) {
if (team) {
setNameField(team.name());
setInfoField(team.settings.info);
setWhitelabelField(team.settings.whitelabel);
setUrl(team.settings.avatar);
}
}, [team]);
@ -77,6 +79,7 @@ export default function TeamSettings(props: Props) {
let team = pond.TeamSettings.create();
team.name = nameField;
team.info = infoField;
team.whitelabel = whitelabelField;
setLoading(true);
teamAPI
.addTeam(team)
@ -101,6 +104,7 @@ export default function TeamSettings(props: Props) {
let newTeam = pond.TeamSettings.create();
newTeam.name = nameField;
newTeam.info = infoField;
newTeam.whitelabel = whitelabelField;
newTeam.avatar = url;
if (teamKey) {
teamAPI
@ -131,6 +135,7 @@ export default function TeamSettings(props: Props) {
const close = () => {
setNameField("");
setInfoField("");
setWhitelabelField("");
setUrl("");
closeTeamDialogCallback();
};
@ -194,6 +199,15 @@ export default function TeamSettings(props: Props) {
style={{ margin: theme.spacing(1) }}
fullWidth
/>
<TextField
label="Whitelabel"
value={whitelabelField}
onChange={event => setWhitelabelField(event?.target.value)}
variant="outlined"
style={{ margin: theme.spacing(1) }}
placeholder="e.g. mivent, adaptive-ag, intellifarms"
fullWidth
/>
</DialogContent>
);
};