~cytrogen/masto-fe

ref: dc35e2d7569a293bbda92ee3ecba8d2d4e6a7b64 masto-fe/app/javascript/flavours/glitch/actions/bookmark_folders.js -rw-r--r-- 4.6 KiB
dc35e2d7 — Cytrogen Rename .scss → .css and remove sass dependency (Phase 9-10) 13 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import api from '../api';

export const BOOKMARK_FOLDERS_FETCH_REQUEST = 'BOOKMARK_FOLDERS_FETCH_REQUEST';
export const BOOKMARK_FOLDERS_FETCH_SUCCESS = 'BOOKMARK_FOLDERS_FETCH_SUCCESS';
export const BOOKMARK_FOLDERS_FETCH_FAIL    = 'BOOKMARK_FOLDERS_FETCH_FAIL';

export const BOOKMARK_FOLDER_CREATE_REQUEST = 'BOOKMARK_FOLDER_CREATE_REQUEST';
export const BOOKMARK_FOLDER_CREATE_SUCCESS = 'BOOKMARK_FOLDER_CREATE_SUCCESS';
export const BOOKMARK_FOLDER_CREATE_FAIL    = 'BOOKMARK_FOLDER_CREATE_FAIL';

export const BOOKMARK_FOLDER_UPDATE_REQUEST = 'BOOKMARK_FOLDER_UPDATE_REQUEST';
export const BOOKMARK_FOLDER_UPDATE_SUCCESS = 'BOOKMARK_FOLDER_UPDATE_SUCCESS';
export const BOOKMARK_FOLDER_UPDATE_FAIL    = 'BOOKMARK_FOLDER_UPDATE_FAIL';

export const BOOKMARK_FOLDER_DELETE_REQUEST = 'BOOKMARK_FOLDER_DELETE_REQUEST';
export const BOOKMARK_FOLDER_DELETE_SUCCESS = 'BOOKMARK_FOLDER_DELETE_SUCCESS';
export const BOOKMARK_FOLDER_DELETE_FAIL    = 'BOOKMARK_FOLDER_DELETE_FAIL';

export const BOOKMARK_FOLDER_EDITOR_NAME_CHANGE = 'BOOKMARK_FOLDER_EDITOR_NAME_CHANGE';
export const BOOKMARK_FOLDER_EDITOR_RESET       = 'BOOKMARK_FOLDER_EDITOR_RESET';
export const BOOKMARK_FOLDER_EDITOR_SETUP       = 'BOOKMARK_FOLDER_EDITOR_SETUP';

export const fetchBookmarkFolders = () => (dispatch, getState) => {
  dispatch(fetchBookmarkFoldersRequest());

  api(getState).get('/api/v1/bookmark_folders')
    .then(({ data }) => dispatch(fetchBookmarkFoldersSuccess(data)))
    .catch(err => dispatch(fetchBookmarkFoldersFail(err)));
};

export const fetchBookmarkFoldersRequest = () => ({
  type: BOOKMARK_FOLDERS_FETCH_REQUEST,
});

export const fetchBookmarkFoldersSuccess = folders => ({
  type: BOOKMARK_FOLDERS_FETCH_SUCCESS,
  folders,
});

export const fetchBookmarkFoldersFail = error => ({
  type: BOOKMARK_FOLDERS_FETCH_FAIL,
  error,
});

export const createBookmarkFolder = (name, shouldReset) => (dispatch, getState) => {
  dispatch(createBookmarkFolderRequest());

  api(getState).post('/api/v1/bookmark_folders', { name }).then(({ data }) => {
    dispatch(createBookmarkFolderSuccess(data));
    
    if (shouldReset) {
      dispatch(resetBookmarkFolderEditor());
    }
  }).catch(err => dispatch(createBookmarkFolderFail(err)));
};

export const createBookmarkFolderRequest = () => ({
  type: BOOKMARK_FOLDER_CREATE_REQUEST,
});

export const createBookmarkFolderSuccess = folder => ({
  type: BOOKMARK_FOLDER_CREATE_SUCCESS,
  folder,
});

export const createBookmarkFolderFail = error => ({
  type: BOOKMARK_FOLDER_CREATE_FAIL,
  error,
});

export const updateBookmarkFolder = (id, name, shouldReset) => (dispatch, getState) => {
  dispatch(updateBookmarkFolderRequest(id));

  api(getState).put(`/api/v1/bookmark_folders/${id}`, { name }).then(({ data }) => {
    dispatch(updateBookmarkFolderSuccess(data));
    
    if (shouldReset) {
      dispatch(resetBookmarkFolderEditor());
    }
  }).catch(err => dispatch(updateBookmarkFolderFail(id, err)));
};

export const updateBookmarkFolderRequest = id => ({
  type: BOOKMARK_FOLDER_UPDATE_REQUEST,
  id,
});

export const updateBookmarkFolderSuccess = folder => ({
  type: BOOKMARK_FOLDER_UPDATE_SUCCESS,
  folder,
});

export const updateBookmarkFolderFail = (id, error) => ({
  type: BOOKMARK_FOLDER_UPDATE_FAIL,
  id,
  error,
});

export const deleteBookmarkFolder = id => (dispatch, getState) => {
  dispatch(deleteBookmarkFolderRequest(id));

  api(getState).delete(`/api/v1/bookmark_folders/${id}`)
    .then(() => dispatch(deleteBookmarkFolderSuccess(id)))
    .catch(err => dispatch(deleteBookmarkFolderFail(id, err)));
};

export const deleteBookmarkFolderRequest = id => ({
  type: BOOKMARK_FOLDER_DELETE_REQUEST,
  id,
});

export const deleteBookmarkFolderSuccess = id => ({
  type: BOOKMARK_FOLDER_DELETE_SUCCESS,
  id,
});

export const deleteBookmarkFolderFail = (id, error) => ({
  type: BOOKMARK_FOLDER_DELETE_FAIL,
  id,
  error,
});

export const submitBookmarkFolderEditor = shouldReset => (dispatch, getState) => {
  const folderId = getState().getIn(['bookmarkFolderEditor', 'folderId']);
  const name  = getState().getIn(['bookmarkFolderEditor', 'name']);

  if (folderId === null) {
    dispatch(createBookmarkFolder(name, shouldReset));
  } else {
    dispatch(updateBookmarkFolder(folderId, name, shouldReset));
  }
};

export const resetBookmarkFolderEditor = () => ({
  type: BOOKMARK_FOLDER_EDITOR_RESET,
});

export const setupBookmarkFolderEditor = folderId => (dispatch, getState) => dispatch({
  type: BOOKMARK_FOLDER_EDITOR_SETUP,
  folder: getState().getIn(['bookmarkFolders', folderId]),
});

export const changeBookmarkFolderEditorName = value => ({
  type: BOOKMARK_FOLDER_EDITOR_NAME_CHANGE,
  value,
});