settings.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. fetched: boolean;
  17. setSettings: Action<Settings, SettingsResp>;
  18. getSettings: Thunk<Settings, null, null, StoreModel>;
  19. setApiKey: Action<Settings, string>;
  20. generateApiKey: Thunk<Settings>;
  21. addDomain: Action<Settings, Domain>;
  22. removeDomain: Action<Settings>;
  23. saveDomain: Thunk<Settings, Domain>;
  24. deleteDomain: Thunk<Settings>;
  25. }
  26. export const settings: Settings = {
  27. domains: [],
  28. apikey: null,
  29. fetched: false,
  30. getSettings: thunk(async (actions, payload, { getStoreActions }) => {
  31. getStoreActions().loading.show();
  32. const res = await axios.get(API.SETTINGS, getAxiosConfig());
  33. actions.setSettings(res.data);
  34. getStoreActions().loading.hide();
  35. }),
  36. generateApiKey: thunk(async actions => {
  37. const res = await axios.post(API.GENERATE_APIKEY, null, getAxiosConfig());
  38. actions.setApiKey(res.data.apikey);
  39. }),
  40. deleteDomain: thunk(async actions => {
  41. await axios.delete(API.CUSTOM_DOMAIN, getAxiosConfig());
  42. actions.removeDomain();
  43. }),
  44. setSettings: action((state, payload) => {
  45. state.apikey = payload.apikey;
  46. state.fetched = true;
  47. if (payload.customDomain) {
  48. state.domains = [
  49. {
  50. customDomain: payload.customDomain,
  51. homepage: payload.homepage
  52. }
  53. ];
  54. }
  55. }),
  56. setApiKey: action((state, payload) => {
  57. state.apikey = payload;
  58. }),
  59. addDomain: action((state, payload) => {
  60. state.domains.push(payload);
  61. }),
  62. removeDomain: action(state => {
  63. state.domains = [];
  64. }),
  65. saveDomain: thunk(async (actions, payload) => {
  66. const res = await axios.post(API.CUSTOM_DOMAIN, payload, getAxiosConfig());
  67. actions.addDomain({
  68. customDomain: res.data.customDomain,
  69. homepage: res.data.homepage
  70. });
  71. })
  72. };