diff --git a/pages/create-job.js b/pages/create-job.js index 9c04f2d..da820fb 100644 --- a/pages/create-job.js +++ b/pages/create-job.js @@ -1,15 +1,37 @@ import React from 'react' +import PropTypes from "prop-types"; +import { connect } from 'react-redux' import { CreateJobContent } from 'src/content' import { MainLayout } from 'src/components/layouts' +import PageContentLoader from 'src/components/PageContentLoader' +import { getSelectInitialPropsLoading, selectInitialProps } from "src/store/createJob"; class CreateJobPage extends React.Component { + + static propTypes = { + selectInitialProps: PropTypes.func.isRequired, + selectInitialPropsLoading: PropTypes.bool.isRequired, + } + + componentDidMount () { + this.props.selectInitialProps() + } + render () { return ( - - + + { this.props.selectInitialPropsLoading ? : } ) } } -export default CreateJobPage +const mapStateToProps = (state) => ({ + selectInitialPropsLoading: getSelectInitialPropsLoading(state), +}) + +const mapDispatchToProps = (dispatch) => ({ + selectInitialProps: () => dispatch(selectInitialProps()), +}) + +export default connect(mapStateToProps, mapDispatchToProps)(CreateJobPage) diff --git a/src/api/backend/index.js b/src/api/backend/index.js index abbd9c8..ff24de9 100644 --- a/src/api/backend/index.js +++ b/src/api/backend/index.js @@ -11,8 +11,8 @@ import ProfileClientModel from "./model/ProfileClientModel" import ProfileWorkerModel from "./model/ProfileWorkerModel" import ProfileRecruiterModel from "./model/ProfileRecruiterModel" -// const API_URL = 'https://backend.profile.tp.ntr1x.com/api/v1' -const API_URL = 'http://localhost:3000/api/v1' +const API_URL = 'https://backend.profile.tp.ntr1x.com/api/v1' +// const API_URL = 'http://localhost:3000/api/v1' const http = axios.create({ baseURL: API_URL }) diff --git a/src/daos/lib/BoardControllerDAO.js b/src/daos/lib/BoardControllerDAO.js index f0bba29..004825c 100644 --- a/src/daos/lib/BoardControllerDAO.js +++ b/src/daos/lib/BoardControllerDAO.js @@ -1,4 +1,5 @@ // import BigNumber from 'bignumber.js' +import get from 'lodash/get' import { BoardModel, BoardIPFSModel, @@ -15,6 +16,9 @@ import { import { loadFromIPFS, bytes32ToIPFSHash, ipfsHashToBytes32 } from 'src/utils' import AbstractContractDAO from './AbstractContractDAO' import {TAGS_LIST} from "../../models"; +import { TAG_ANY_MASK } from "src/models/meta/TagModel"; +import { TAG_AREA_ANY_MASK } from "src/models/meta/TagAreaModel"; +import { TAG_CATEGORY_ANY_MASK } from "src/models/meta/TagCategoryModel"; export default class BoardControllerDAO extends AbstractContractDAO { constructor ({ address, history, abi }) { @@ -85,6 +89,12 @@ export default class BoardControllerDAO extends AbstractContractDAO { return boards } + async getBoardsForUser (address, tags = TAG_ANY_MASK, tagsArea = TAG_AREA_ANY_MASK, tagsCategory = TAG_CATEGORY_ANY_MASK) { + const ids = await this.contract.methods.getBoardsForUser(address, tags, tagsArea, tagsCategory).call() + const boards = await this.getBoards(address) + let b=8; + } + async getBoardsByIds (signer, ids: Number[]) { const boards = [] const response = await this.contract.methods.getBoardsByIds(ids).call() @@ -115,11 +125,11 @@ export default class BoardControllerDAO extends AbstractContractDAO { tagsCategory: TagCategoryModel.arrayValueOfMask(_tagsCategories[i]), ipfs: new BoardIPFSModel({ ...ipfs, - joinRequirement: ipfs.joinRequirement !== undefined ? BoardRequirementModel.valueOf(ipfs.joinRequirement) : null, - fee: ipfs.fee !== undefined ? BoardPostFeeModel.valueOf(ipfs.fee) : null, - lhus: ipfs.lhus !== undefined ? +ipfs.lhus : 0, + joinRequirement: get(ipfs, "joinRequirement") !== undefined ? BoardRequirementModel.valueOf(get(ipfs, "joinRequirement")) : null, + fee: get(ipfs, "fee") !== undefined ? BoardPostFeeModel.valueOf(get(ipfs, "fee")) : null, + lhus: get(ipfs, "lhus") !== undefined ? +get(ipfs, "lhus") : 0, hash: ipfsHash, - endorsingSkills: !!ipfs.endorsingSkills, + endorsingSkills: !!get(ipfs, "endorsingSkills"), }), extra: new BoardExtraModel({ isSignerJoined, diff --git a/src/index.js b/src/index.js index 95c4d71..779db26 100644 --- a/src/index.js +++ b/src/index.js @@ -105,6 +105,7 @@ import { completedJobs, applicationsAndOffers, auth, + createJob, } from "src/store/reducers" import AuthRoute from "src/components/routes/AuthRoute" @@ -159,6 +160,7 @@ const reducer = combineReducers({ completedJobs, applicationsAndOffers, auth, + createJob, }) const store = createStore( diff --git a/src/store/createJob/actions.js b/src/store/createJob/actions.js new file mode 100644 index 0000000..837ea4c --- /dev/null +++ b/src/store/createJob/actions.js @@ -0,0 +1,22 @@ +import { signerSelector } from '../wallet/selectors' +import { daoByType } from "src/store"; + +export const SELECT_INITIAL_PROPS_REQUEST = 'CREATE_JOB/SELECT_INITIAL_PROPS/REQUEST' +export const SELECT_INITIAL_PROPS_SUCCESS = 'CREATE_JOB/SELECT_INITIAL_PROPS/SUCCESS' +export const SELECT_INITIAL_PROPS_FAILURE = 'CREATE_JOB/SELECT_INITIAL_PROPS/FAILURE' +export const selectInitialPropsRequest = (req) => ({ type: SELECT_INITIAL_PROPS_REQUEST, payload: req }) +export const selectInitialPropsSuccess = (res) => ({ type: SELECT_INITIAL_PROPS_SUCCESS, payload: res }) +export const selectInitialPropsFailure = (err) => ({ type: SELECT_INITIAL_PROPS_FAILURE, payload: err }) +export const selectInitialProps = () => async (dispatch, getState) => { + try { + dispatch(selectInitialPropsRequest()) + const state = getState() + const BoardController = daoByType('BoardController')(state) + const signer = signerSelector()(state) + const myConnectedBoards = await BoardController.getBoardsForUser(signer.address) + + dispatch(selectInitialPropsSuccess({ myConnectedBoards })) + } catch (err) { + dispatch(selectInitialPropsFailure(err)) + } +} diff --git a/src/store/createJob/index.js b/src/store/createJob/index.js new file mode 100644 index 0000000..4d8b833 --- /dev/null +++ b/src/store/createJob/index.js @@ -0,0 +1,3 @@ +export * from './actions' +export * from './reducer' +export * from './selectors' diff --git a/src/store/createJob/reducer.js b/src/store/createJob/reducer.js new file mode 100644 index 0000000..243116a --- /dev/null +++ b/src/store/createJob/reducer.js @@ -0,0 +1,46 @@ +// @flow + +import { + SELECT_INITIAL_PROPS_REQUEST, + SELECT_INITIAL_PROPS_SUCCESS, + SELECT_INITIAL_PROPS_FAILURE, +} from "./actions" + +interface State { + selectInitialPropsLoading: boolean; + myConnectedBoards: Array; + selectInitialPropsFailure: Error; +} + +export const STATE: State = { + selectInitialPropsLoading: true, + myConnectedBoards: [], + selectInitialPropsFailure: true, +} + +export default (state: State = STATE, action) => { + + switch (action.type) { + + case SELECT_INITIAL_PROPS_REQUEST: return ({ + ...state, + selectInitialPropsLoading: true, + }) + case SELECT_INITIAL_PROPS_SUCCESS: return ({ + ...state, + selectInitialPropsLoading: false, + myConnectedBoards: action.payload.myConnectedBoards, + }) + case SELECT_INITIAL_PROPS_FAILURE: return ({ + ...state, + selectInitialPropsLoading: false, + selectInitialPropsFailure: action.payload, + }) + + default: return ({ + ...state, + }) + + } + +} diff --git a/src/store/createJob/selectors.js b/src/store/createJob/selectors.js new file mode 100644 index 0000000..b408bb1 --- /dev/null +++ b/src/store/createJob/selectors.js @@ -0,0 +1,12 @@ +import { createSelector } from "reselect" +import moment from 'moment' +import groupBy from 'lodash/groupBy' + +export const getState = state => state.createJob + +export const getSelectInitialPropsLoading = createSelector(getState, state => state.selectInitialPropsLoading) + +export const getMyConnectedBoards = createSelector( + getState, + state => state.myConnectedBoards +) diff --git a/src/store/reducers.js b/src/store/reducers.js index f3dc8a5..bc91a94 100644 --- a/src/store/reducers.js +++ b/src/store/reducers.js @@ -25,3 +25,4 @@ export { default as archiveJobs } from './archiveJobs/reducer' export { default as completedJobs } from './completedJobs/reducer' export { default as applicationsAndOffers } from './applicationsAndOffers/reducer' export { default as auth } from './auth/reducer' +export { default as createJob } from './createJob/reducer' diff --git a/webpack.config.dvlp.js b/webpack.config.dvlp.js index f034aea..f89b43a 100644 --- a/webpack.config.dvlp.js +++ b/webpack.config.dvlp.js @@ -5,7 +5,7 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl module.exports = merge(common, { mode: 'development', - // devtool: 'source-map', + devtool: 'source-map', // plugins: [ // new BundleAnalyzerPlugin() // ],