When adding a domain, you can also add a custom email address.

This commit is contained in:
yoan
2024-09-13 07:36:26 +08:00
parent 139a6980ac
commit 7550aec904
12 changed files with 1147 additions and 289 deletions

View File

@@ -10,9 +10,12 @@ import {
useReducer,
} from "react";
import { configReducer } from "./reducer";
import { getEmails } from "@/repository/settings";
import { Setting } from "@/domain/settings";
export type ConfigData = {
accesses: Access[];
emails: Setting;
};
export type ConfigContext = {
@@ -20,6 +23,7 @@ export type ConfigContext = {
deleteAccess: (id: string) => void;
addAccess: (access: Access) => void;
updateAccess: (access: Access) => void;
setEmails: (email: Setting) => void;
};
const Context = createContext({} as ConfigContext);
@@ -31,7 +35,10 @@ interface ContainerProps {
}
export const ConfigProvider = ({ children }: ContainerProps) => {
const [config, dispatchConfig] = useReducer(configReducer, { accesses: [] });
const [config, dispatchConfig] = useReducer(configReducer, {
accesses: [],
emails: { content: { emails: [] } },
});
useEffect(() => {
const featchData = async () => {
@@ -41,6 +48,18 @@ export const ConfigProvider = ({ children }: ContainerProps) => {
featchData();
}, []);
useEffect(() => {
const featchEmails = async () => {
const emails = await getEmails();
dispatchConfig({ type: "SET_EMAILS", payload: emails });
};
featchEmails();
}, []);
const setEmails = useCallback((emails: Setting) => {
dispatchConfig({ type: "SET_EMAILS", payload: emails });
}, []);
const deleteAccess = useCallback((id: string) => {
dispatchConfig({ type: "DELETE_ACCESS", payload: id });
}, []);
@@ -58,9 +77,11 @@ export const ConfigProvider = ({ children }: ContainerProps) => {
value={{
config: {
accesses: config.accesses,
emails: config.emails,
},
deleteAccess,
addAccess,
setEmails,
updateAccess,
}}
>

View File

@@ -1,11 +1,14 @@
import { Access } from "@/domain/access";
import { ConfigData } from ".";
import { Setting } from "@/domain/settings";
type Action =
| { type: "ADD_ACCESS"; payload: Access }
| { type: "DELETE_ACCESS"; payload: string }
| { type: "UPDATE_ACCESS"; payload: Access }
| { type: "SET_ACCESSES"; payload: Access[] };
| { type: "SET_ACCESSES"; payload: Access[] }
| { type: "SET_EMAILS"; payload: Setting }
| { type: "ADD_EMAIL"; payload: string };
export const configReducer = (
state: ConfigData,
@@ -40,6 +43,23 @@ export const configReducer = (
),
};
}
case "SET_EMAILS": {
return {
...state,
emails: action.payload,
};
}
case "ADD_EMAIL": {
return {
...state,
emails: {
...state.emails,
content: {
emails: [...state.emails.content.emails, action.payload],
},
},
};
}
default:
return state;
}