123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- /*
- * <<
- * Davinci
- * ==
- * Copyright (C) 2016 - 2017 EDP
- * ==
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * >>
- */
- import api from 'utils/api'
- import request from 'utils/request'
- import { errorHandler } from 'utils/util'
- import { ActionTypes } from './constants'
- import { ProjectActions, ProjectActionType } from './actions'
- import { ActionTypes as OrganizationActionTypes } from '../Organizations/constants'
- import { call, all, put, takeLatest, takeEvery, throttle } from 'redux-saga/effects'
- import { OrganizationActions, OrganizationActionType } from 'containers/Organizations/actions'
- export function* getProjects (action: ProjectActionType) {
- if (action.type !== ActionTypes.LOAD_PROJECTS) { return }
- const { projectsLoaded, loadProjectsFail } = ProjectActions
- try {
- const asyncData = yield call(request, api.projects)
- const projects = asyncData.payload
- yield put(projectsLoaded(projects))
- } catch (err) {
- yield put(loadProjectsFail())
- errorHandler(err)
- }
- }
- export function* addProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.ADD_PROJECT) { return }
- const { project, resolve } = action.payload
- const { projectAdded, addProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'post',
- url: api.projects,
- data: project
- })
- const result = asyncData.payload
- yield put(projectAdded(result))
- resolve()
- } catch (err) {
- yield put(addProjectFail())
- errorHandler(err)
- }
- }
- export function* editProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.EDIT_PROJECT) { return }
- const { project, resolve } = action.payload
- const { id } = project
- const { projectEdited, editProjectFail } = ProjectActions
- try {
- yield call(request, {
- method: 'put',
- url: `${api.projects}/${id}`,
- data: project
- })
- yield put(projectEdited(project))
- resolve()
- } catch (err) {
- yield put(editProjectFail())
- errorHandler(err)
- }
- }
- export function* deleteProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.DELETE_PROJECT) { return }
- const { id, resolve } = action.payload
- const { projectDeleted, deleteProjectFail } = ProjectActions
- try {
- yield call(request, {
- method: 'delete',
- url: `${api.projects}/${id}`
- })
- yield put(projectDeleted(id))
- if (resolve) {
- resolve()
- }
- } catch (err) {
- yield put(deleteProjectFail())
- errorHandler(err)
- }
- }
- export function* addProjectAdmin (action: ProjectActionType) {
- if (action.type !== ActionTypes.ADD_PROJECT_ADMIN) { return }
- const { id, adminIds, resolve } = action.payload
- const { addProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'post',
- url: `${api.projects}/${id}/admins`,
- data: adminIds
- })
- const result = asyncData.payload
- // yield put(projectAdded(result))
- resolve(result)
- } catch (err) {
- yield put(addProjectFail())
- errorHandler(err)
- }
- }
- export function* deleteProjectAdmin (action: ProjectActionType) {
- if (action.type !== ActionTypes.DELETE_PROJECT_ADMIN) { return }
- const { id, relationId, resolve } = action.payload
- const { deleteProjectAdminFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'delete',
- url: `${api.projects}/${id}/admin/${relationId}`
- })
- const result = asyncData.payload
- // yield put(projectAdded(result))
- resolve(result)
- } catch (err) {
- yield put(deleteProjectAdminFail())
- errorHandler(err)
- }
- }
- export function* addProjectRole (action: ProjectActionType) {
- if (action.type !== ActionTypes.ADD_PROJECT_ROLE) { return }
- const { projectId, roleIds, resolve } = action.payload
- const { addProjectRoleFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'post',
- url: `${api.projects}/${projectId}/roles`,
- data: roleIds
- })
- const result = asyncData.payload
- resolve(result)
- } catch (err) {
- yield put(addProjectRoleFail())
- errorHandler(err)
- }
- }
- export function* getProjectDetail (action: ProjectActionType) {
- if (action.type !== ActionTypes.LOAD_PROJECT_DETAIL) { return }
- const { id: projectId } = action.payload
- const { projectDetailLoaded } = ProjectActions
- try {
- const asyncData = yield call(request, `${api.projects}/${projectId}`)
- const project = asyncData.payload
- yield put(projectDetailLoaded(project))
- } catch (err) {
- errorHandler(err)
- }
- }
- export function* transferProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.TRANSFER_PROJECT) { return }
- const { id, orgId } = action.payload
- const { projectTransfered, transferProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'put',
- url: `${api.projects}/${id}/transfer`,
- data: {orgId}
- })
- const result = asyncData.payload
- yield put(projectTransfered(result))
- } catch (err) {
- yield put(transferProjectFail())
- errorHandler(err)
- }
- }
- export function* searchProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.SEARCH_PROJECT) { return }
- const { param: { keywords, pageNum, pageSize } } = action.payload
- const { projectSearched, searchProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'get',
- url: `${api.projects}/search/?pageNum=${pageNum || 1}&pageSize=${pageSize || 10}&keywords=${keywords || ''}`
- })
- const result = asyncData.payload
- yield put(projectSearched(result))
- } catch (err) {
- yield put(searchProjectFail())
- errorHandler(err)
- }
- }
- export function* unStarProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.PROJECT_UNSTAR) { return }
- const { id, resolve } = action.payload
- const { unStarProjectSuccess, unStarProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'post',
- url: `${api.star}/project/${id}`,
- data: {id}
- })
- const result = asyncData.payload
- yield put(unStarProjectSuccess(result))
- yield resolve()
- } catch (err) {
- yield put(unStarProjectFail())
- errorHandler(err)
- }
- }
- export function* getProjectStarUser (action: ProjectActionType) {
- if (action.type !== ActionTypes.GET_PROJECT_STAR_USER) { return }
- const { id } = action.payload
- const { getProjectStarUserSuccess, getProjectStarUserFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'get',
- url: `${api.star}/project/${id}`
- })
- const result = asyncData.payload
- yield put(getProjectStarUserSuccess(result))
- } catch (err) {
- yield put(getProjectStarUserFail())
- errorHandler(err)
- }
- }
- export function* getCollectProjects () {
- const { collectProjectLoaded, collectProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'get',
- url: `${api.projects}/favorites`
- })
- const result = asyncData.payload
- yield put(collectProjectLoaded(result))
- } catch (err) {
- yield put(collectProjectFail())
- errorHandler(err)
- }
- }
- export function* editCollectProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.CLICK_COLLECT_PROJECT) { return }
- const { isFavorite, proId, resolve } = action.payload
- const { collectProjectClicked, clickCollectProjectFail } = ProjectActions
- try {
- if (!isFavorite) {
- yield call(request, {
- method: 'post',
- url: `${api.projects}/favorite/${proId}`,
- data: {id: proId}
- })
- } else {
- yield call(request, {
- method: 'delete',
- url: `${api.projects}/remove/favorites`,
- data: [proId]
- })
- }
- yield put(collectProjectClicked(action.payload))
- yield resolve()
- } catch (err) {
- yield put(clickCollectProjectFail())
- errorHandler(err)
- }
- }
- export function* loadRelRoleProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.LOAD_RELATION_ROLE_PROJECT) { return }
- const { id, roleId } = action.payload
- const { relRoleProjectLoaded, loadRelRoleProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'get',
- url: `${api.projects}/${id}/roles/${roleId}`
- })
- const result = asyncData.payload
- yield put(relRoleProjectLoaded(result))
- } catch (err) {
- yield put(loadRelRoleProjectFail())
- errorHandler(err)
- }
- }
- export function* updateRelRoleProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.UPDATE_RELATION_ROLE_PROJECT) { return }
- const { roleId, projectId, projectRole } = action.payload
- const { relRoleProjectUpdated, updateRelRoleProjectFail } = ProjectActions
- try {
- yield call(request, {
- method: 'put',
- url: `${api.roles}/${roleId}/project/${projectId}`,
- data: projectRole
- })
- yield put(relRoleProjectUpdated(projectRole))
- } catch (err) {
- yield put(updateRelRoleProjectFail())
- errorHandler(err)
- }
- }
- export function* deleteRelRoleProject (action: ProjectActionType) {
- if (action.type !== ActionTypes.DELETE_RELATION_ROLE_PROJECT) { return }
- const { roleId, projectId, resolve } = action.payload
- const { relRoleProjectDeleted, deleteRelRoleProjectFail } = ProjectActions
- try {
- const asyncData = yield call(request, {
- method: 'delete',
- url: `${api.roles}/${roleId}/project/${projectId}`
- })
- const result = asyncData.payload
- yield put(relRoleProjectDeleted(result))
- resolve()
- } catch (err) {
- yield put(deleteRelRoleProjectFail())
- errorHandler(err)
- }
- }
- export function* getProjectRoles (action: OrganizationActionType) {
- if (action.type !== OrganizationActionTypes.LOAD_PROJECT_ROLES) { return }
- const { projectId } = action.payload
- const { projectRolesLoaded, loadProjectRolesFail } = OrganizationActions
- try {
- const asyncData = yield call(request, `${api.projects}/${projectId}/roles`)
- const results = asyncData.payload
- yield put(projectRolesLoaded(results))
- } catch (err) {
- yield put(loadProjectRolesFail())
- errorHandler(err)
- }
- }
- export function* excludeRole (action: ProjectActionType) {
- if (action.type !== ActionTypes.EXCLUDE_ROLES) { return }
- const { id, type, resolve } = action.payload
- const { rolesExcluded, excludeRolesFail } = ProjectActions
- let host: string
- switch (type) {
- case 'dashboard':
- host = `${api.portal}/dashboard`
- break
- case 'portal':
- host = `${api.portal}`
- break
- case 'display':
- host = `${api.display}`
- break
- default:
- break
- }
- try {
- const asyncData = yield call(request, `${host}/${id}/exclude/roles`)
- const results = asyncData.payload
- yield put(rolesExcluded(results))
- resolve(results)
- } catch (err) {
- yield put(excludeRolesFail(err))
- }
- }
- export default function* rootProjectSaga () {
- yield all([
- takeLatest(ActionTypes.LOAD_PROJECTS, getProjects),
- takeLatest(ActionTypes.ADD_PROJECT_ROLE, addProjectRole),
- takeEvery(ActionTypes.ADD_PROJECT, addProject),
- takeEvery(ActionTypes.EDIT_PROJECT, editProject),
- takeEvery(ActionTypes.DELETE_PROJECT, deleteProject),
- takeLatest(ActionTypes.LOAD_PROJECT_DETAIL, getProjectDetail),
- takeEvery(ActionTypes.TRANSFER_PROJECT, transferProject),
- takeEvery(ActionTypes.PROJECT_UNSTAR, unStarProject),
- takeEvery(ActionTypes.GET_PROJECT_STAR_USER, getProjectStarUser),
- throttle(1000, ActionTypes.SEARCH_PROJECT, searchProject),
- takeLatest(ActionTypes.LOAD_COLLECT_PROJECTS, getCollectProjects),
- takeEvery(ActionTypes.CLICK_COLLECT_PROJECT, editCollectProject),
- takeEvery(ActionTypes.ADD_PROJECT_ADMIN, addProjectAdmin),
- takeEvery(ActionTypes.DELETE_PROJECT_ADMIN, deleteProjectAdmin),
- takeEvery(ActionTypes.LOAD_RELATION_ROLE_PROJECT, loadRelRoleProject),
- takeEvery(ActionTypes.UPDATE_RELATION_ROLE_PROJECT, updateRelRoleProject),
- takeEvery(ActionTypes.DELETE_RELATION_ROLE_PROJECT, deleteRelRoleProject),
- takeEvery(OrganizationActionTypes.LOAD_PROJECT_ROLES, getProjectRoles),
- takeEvery(ActionTypes.EXCLUDE_ROLES, excludeRole)
- ])
- }
|