Skip to content

Commit

Permalink
Add delete account support (#302)
Browse files Browse the repository at this point in the history
* Add delete account support

* add peer approval form item

* block menu for non owners
  • Loading branch information
mlsmaycon authored Dec 7, 2023
1 parent 0199ea8 commit 2f800bf
Show file tree
Hide file tree
Showing 5 changed files with 519 additions and 253 deletions.
9 changes: 8 additions & 1 deletion src/store/account/actions.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {ActionType, createAction, createAsyncAction} from 'typesafe-actions';
import {Account} from './types';
import {ApiError, ChangeResponse, RequestPayload} from '../../services/api-client/types';
import {ApiError, ChangeResponse, DeleteResponse, RequestPayload} from '../../services/api-client/types';

const actions = {
getAccounts: createAsyncAction(
Expand All @@ -16,6 +16,13 @@ const actions = {
)<RequestPayload<Account>, ChangeResponse<Account | null>, ChangeResponse<Account | null>>(),
setUpdateAccount: createAction('SET_UPDATED_ACCOUNT')<ChangeResponse<Account | null>>(),
resetUpdateAccount: createAction('RESET_UPDATED_ACCOUNT')<null>(),
deleteAccount: createAsyncAction(
'DELETE_ACCOUNT_REQUEST',
'DELETE_ACCOUNT_SUCCESS',
'DELETE_ACCOUNT_FAILURE'
)<RequestPayload<string>, DeleteResponse<string | null>, DeleteResponse<string | null>>(),
resetDeletedAccount: createAction('RESET_DELETED_ACCOUNT')<null>(),
setDeleteAccount: createAction('SET_DELETE_ACCOUNT')<DeleteResponse<string | null>>(),
};


Expand Down
20 changes: 18 additions & 2 deletions src/store/account/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import { createReducer } from 'typesafe-actions';
import { combineReducers } from 'redux';
import { Account } from './types';
import actions, { ActionTypes } from './actions';
import {ApiError, ChangeResponse} from "../../services/api-client/types";
import {ApiError, ChangeResponse, DeleteResponse} from "../../services/api-client/types";

type StateType = Readonly<{
data: Account[] | null;
loading: boolean;
failed: ApiError | null;
savedAccount: ChangeResponse<Account | null>;
deletedAccount: DeleteResponse<string | null>;
}>;

const initialState: StateType = {
Expand All @@ -22,6 +23,13 @@ const initialState: StateType = {
error: null,
data : null
},
deletedAccount: <DeleteResponse<string | null>>{
loading: false,
success: false,
failure: false,
error: null,
data : null
},
};

const data = createReducer<Account[], ActionTypes>(initialState.data as Account[])
Expand All @@ -45,10 +53,18 @@ const updatedAccount = createReducer<ChangeResponse<Account | null>, ActionTypes
.handleAction(actions.setUpdateAccount, (store, action) => action.payload)
.handleAction(actions.resetUpdateAccount, () => initialState.savedAccount)

const deleteAccount = createReducer<DeleteResponse<string | null>, ActionTypes>(initialState.deletedAccount)
.handleAction(actions.deleteAccount.request, () => initialState.deletedAccount)
.handleAction(actions.deleteAccount.success, (store, action) => action.payload)
.handleAction(actions.deleteAccount.failure, (store, action) => action.payload)
.handleAction(actions.setDeleteAccount, (store, action) => action.payload)
.handleAction(actions.resetDeletedAccount, () => initialState.deletedAccount)


export default combineReducers({
data,
loading,
failed,
updatedAccount
updatedAccount,
deleteAccount
});
50 changes: 48 additions & 2 deletions src/store/account/sagas.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import {all, call, put, takeLatest} from 'redux-saga/effects';
import {ApiError, ApiResponse, ChangeResponse} from '../../services/api-client/types';
import {all, call, put, select, takeLatest} from 'redux-saga/effects';
import {ApiError, ApiResponse, ChangeResponse, DeleteResponse} from '../../services/api-client/types';
import {Account} from './types'
import service from './service';
import actions from './actions';
import {deletePeer} from "../peer/sagas";

export function* getAccounts(action: ReturnType<typeof actions.getAccounts.request>): Generator {
try {
Expand Down Expand Up @@ -55,10 +56,55 @@ export function* updateAccount(action: ReturnType<typeof actions.updateAccount.r
}
}

export function* deleteAccount(
action: ReturnType<typeof actions.deleteAccount.request>
): Generator {
try {
yield call(actions.setDeleteAccount, {
loading: true,
success: false,
failure: false,
error: null,
data: null,
} as DeleteResponse<string | null>);

const effect = yield call(service.deleteAccount, action.payload);
const response = effect as ApiResponse<any>;

yield put(
actions.deleteAccount.success({
loading: false,
success: true,
failure: false,
error: null,
data: response.body,
} as DeleteResponse<string | null>)
);

const accounts = (yield select((state) => state.peer.data)) as Account[];
yield put(
actions.getAccounts.success(
accounts.filter((p: Account) => p.id !== action.payload.payload)
)
);
} catch (err) {
yield put(
actions.deleteAccount.failure({
loading: false,
success: false,
failure: false,
error: err as ApiError,
data: null,
} as DeleteResponse<string | null>)
);
}
}

export default function* sagas(): Generator {
yield all([
takeLatest(actions.getAccounts.request, getAccounts),
takeLatest(actions.updateAccount.request, updateAccount),
takeLatest(actions.deleteAccount.request, deleteAccount),
]);
}

8 changes: 7 additions & 1 deletion src/store/account/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,11 @@ export default {
`/api/accounts/${id}`,
payload
);
}
},
async deleteAccount(payload:RequestPayload<string>): Promise<ApiResponse<any>> {
return apiClient.delete<any>(
`/api/accounts/` + payload.payload,
payload
);
},
};
Loading

0 comments on commit 2f800bf

Please sign in to comment.