settings.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { action, Action, thunk, Thunk } from "easy-peasy";
  2. import axios from "axios";
  3. import { getAxiosConfig } from "../utils";
  4. import { StoreModel } from "./store";
  5. import { API } from "../consts";
  6. export interface Domain {
  7. customDomain: string;
  8. homepage: string;
  9. }
  10. export interface SettingsResp extends Domain {
  11. apikey: string;
  12. }
  13. export interface Settings {
  14. domains: Array<Domain>;
  15. apikey: string;
  16. setSettings: Action<Settings, SettingsResp>;
  17. getSettings: Thunk<Settings, null, null, StoreModel>;
  18. setApiKey: Action<Settings, string>;
  19. generateApiKey: Thunk<Settings>;
  20. addDomain: Action<Settings, Domain>;
  21. removeDomain: Action<Settings>;
  22. saveDomain: Thunk<Settings, Domain>;
  23. deleteDomain: Thunk<Settings>;
  24. }
  25. export const settings: Settings = {
  26. domains: [],
  27. apikey: null,
  28. setSettings: action((state, payload) => {
  29. state.apikey = payload.apikey;
  30. if (payload.customDomain) {
  31. state.domains = [
  32. {
  33. customDomain: payload.customDomain,
  34. homepage: payload.homepage
  35. }
  36. ];
  37. }
  38. }),
  39. getSettings: thunk(async (actions, payload, { getStoreActions }) => {
  40. getStoreActions().loading.show();
  41. const res = await axios.get(API.SETTINGS, getAxiosConfig());
  42. actions.setSettings(res.data);
  43. getStoreActions().loading.hide();
  44. }),
  45. setApiKey: action((state, payload) => {
  46. state.apikey = payload;
  47. }),
  48. generateApiKey: thunk(async actions => {
  49. const res = await axios.post(API.GENERATE_APIKEY, null, getAxiosConfig());
  50. actions.setApiKey(res.data.apikey);
  51. }),
  52. addDomain: action((state, payload) => {
  53. state.domains.push(payload);
  54. }),
  55. removeDomain: action(state => {
  56. state.domains = [];
  57. }),
  58. saveDomain: thunk(async (actions, payload) => {
  59. const res = await axios.post(API.CUSTOM_DOMAIN, payload, getAxiosConfig());
  60. actions.addDomain({
  61. customDomain: res.data.customDomain,
  62. homepage: res.data.homepage
  63. });
  64. }),
  65. deleteDomain: thunk(async actions => {
  66. await axios.delete(API.CUSTOM_DOMAIN, getAxiosConfig());
  67. actions.removeDomain();
  68. })
  69. };