Skip to content

Commit fc10d0a

Browse files
authored
Merge pull request #1049 from singnet/users-development
Marketplace refactoring
2 parents 8fe53f8 + 49bb325 commit fc10d0a

File tree

70 files changed

+770
-1095
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+770
-1095
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
},
5656
"resolutions": {
5757
"concat-stream": "github:singnet/concat-stream",
58-
"zod": "3.21.4"
58+
"zod": "3.21.4"
5959
},
6060
"overrides": {
6161
"rimraf": "^4.0.0",

scripts/sitemap-generator.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ require("@babel/register")({
77
const defaultPagination = {
88
q: "",
99
limit: 50,
10-
offset: 0,
11-
total_count: 0,
10+
page: 1,
11+
totalCount: 0,
1212
s: "all",
13-
sort_by: "ranking",
14-
order_by: "asc",
13+
sort: "ranking",
14+
order: "asc",
1515
filters: [],
1616
};
1717

@@ -24,17 +24,17 @@ async function fetchServices(pagination = defaultPagination, step = 50) {
2424
data: { data },
2525
} = await axios.post(url, pagination);
2626
const { result } = data;
27-
console.log("offset", data.offset);
27+
console.log("page", data.page);
2828
console.log("limit", data.limit);
2929
console.log("services length", services.length);
30-
console.log("total count", data.total_count);
30+
console.log("total count", data.totalCount);
3131
console.log("-----****-----");
3232
services = services.concat(result);
33-
if (services.length < data.total_count) {
33+
if (services.length < data.totalCount) {
3434
const enhancedPagination = Object.assign({}, pagination, {
35-
offset: pagination.offset + step,
35+
page: pagination.page + step,
3636
});
37-
if (enhancedPagination.offset > data.total_count) {
37+
if (enhancedPagination.page > data.totalCount) {
3838
throw new Error("Trying to fetch more than total count");
3939
}
4040
await fetchServices(enhancedPagination);
@@ -55,8 +55,8 @@ async function generateSitemap() {
5555
await fetchServices();
5656
console.log("fetched all services");
5757
const idMap = services.map((service) => ({
58-
orgId: service.org_id,
59-
serviceId: service.service_id,
58+
orgId: service.orgId,
59+
serviceId: service.serviceId,
6060
}));
6161

6262
const activeUserTabsMap = ["account", "settings", "transactions"].map((tab) => ({ "activeTab?": tab }));

src/App.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,17 @@ initGDPRNotification();
5151

5252
const App = () => {
5353
const isLoggedIn = useSelector((state) => state.userReducer.login.isLoggedIn);
54-
const isTermsAccepted = useSelector((state) => state.userReducer.isTermsAccepted);
54+
const isTermsAccepted = useSelector((state) => state.userReducer.isTermsAccepted.accepted);
5555
const isInitialized = useSelector((state) => state.userReducer.isInitialized);
5656

5757
const isLoggedInAndTermsAccepted = isLoggedIn && isTermsAccepted;
58-
const isNotLoggedInPageAvailable = !isLoggedIn || isTermsAccepted;
58+
const isNotLoggedInPageAvailable = !isLoggedIn || isLoggedInAndTermsAccepted;
5959

6060
const dispatch = useDispatch();
6161

6262
useEffect(() => {
6363
dispatch(userActions.fetchUserDetails());
64+
dispatch(userActions.getIsTermsAcceptedInfo());
6465
}, [dispatch]);
6566

6667
const Loader = () => {

src/Redux/actionCreators/ServiceActions.js

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { APIEndpoints, APIPaths } from "../../config/APIEndpoints";
22
import { loaderActions, userActions } from "./";
33
import { getAPI, postAPI, initializeAPIOptions } from "../../utility/API";
4-
import { generateOrganizationsFilterObject } from "../../utility/constants/Pagination";
5-
// import { cacheS3Url } from "../../utility/image";
4+
import { defaultActiveFilterItem } from "../../utility/constants/Pagination";
65

76
export const UPDATE_SERVICE_LIST = "SET_SERVICE_LIST";
87
export const UPDATE_PAGINATION_DETAILS = "SET_PAGINATION_DETAILS";
@@ -13,18 +12,23 @@ export const UPDATE_FILTER_DATA = "UPDATE_FILTER_DATA";
1312
export const UPDATE_ACTIVE_FILTER_ITEM = "UPDATE_ACTIVE_FILTER_ITEM";
1413
export const RESET_FILTER_ITEM = "RESET_FILTER_ITEM";
1514
export const UPDATE_FEEDBACK = "UPDATE_FEEDBACK";
15+
export const UPDATE_SRVICE_COUNT = "UPDATE_SRVICE_COUNT";
1616

1717
export const updateActiveFilterItem = (activeFilterItem) => (dispatch) => {
1818
dispatch({ type: UPDATE_ACTIVE_FILTER_ITEM, payload: { ...activeFilterItem } });
1919
};
2020

21+
const updateServicesTotalCount = (totalCount) => (dispatch) => {
22+
dispatch({ type: UPDATE_SRVICE_COUNT, payload: totalCount });
23+
};
24+
2125
export const resetFilterItem = (dispatch) => {
2226
dispatch({ type: RESET_FILTER_ITEM });
2327
};
2428

2529
export const fetchServiceSuccess = (res) => (dispatch) => {
26-
dispatch(updatePagination({ total_count: res.data.total_count }));
27-
dispatch({ type: UPDATE_SERVICE_LIST, payload: res.data.result });
30+
dispatch(updateServicesTotalCount(res.totalCount));
31+
dispatch({ type: UPDATE_SERVICE_LIST, payload: res.services });
2832
dispatch(loaderActions.stopAIServiceListLoader());
2933
};
3034

@@ -38,29 +42,26 @@ export const fetchUserOrganizationsList = () => async (dispatch) => {
3842

3943
const onlyUserOrgsFilter = () => async (dispatch) => {
4044
const userOrganizations = await dispatch(fetchUserOrganizationsList());
41-
const userOrganizationsId = userOrganizations.data.map((organization) => organization.org_id);
42-
const filterObj = generateOrganizationsFilterObject([
43-
...userOrganizationsId,
44-
process.env.REACT_APP_EXAMPLE_SERVICE_ORG_ID,
45-
]);
45+
const userOrganizationsId = userOrganizations.data.map((organization) => organization.orgId);
46+
const filterObj = { orgId: [...userOrganizationsId, process.env.REACT_APP_EXAMPLE_SERVICE_ORG_ID] };
4647
return filterObj;
4748
};
4849

4950
export const fetchService =
50-
(pagination, filters = []) =>
51+
(pagination, filter = defaultActiveFilterItem) =>
5152
async (dispatch) => {
5253
// env variable is string
5354
if (process.env.REACT_APP_IS_ALL_SERVICES_AVAILIBLE !== "true") {
54-
filters = await dispatch(onlyUserOrgsFilter());
55+
filter = await dispatch(onlyUserOrgsFilter());
5556
}
5657
dispatch(loaderActions.startAIServiceListLoader());
5758
const url = new URL(APIEndpoints.CONTRACT.endpoint + APIPaths.GET_SERVICE_LIST);
5859
return fetch(url, {
5960
method: "POST",
60-
body: JSON.stringify({ ...pagination, filters }),
61+
body: JSON.stringify({ ...pagination, filter }),
6162
})
6263
.then((res) => res.json())
63-
.then((res) => dispatch(fetchServiceSuccess(res)))
64+
.then((res) => dispatch(fetchServiceSuccess(res.data)))
6465
.catch(() => dispatch(loaderActions.stopAIServiceListLoader()));
6566
};
6667

@@ -80,18 +81,14 @@ export const fetchFilterData = (attribute) => (dispatch) => {
8081
});
8182
};
8283

83-
export const handleFilterChange =
84-
({ pagination, filterObj, currentActiveFilterData }) =>
85-
(dispatch) => {
86-
dispatch(loaderActions.startAIServiceListLoader());
87-
Promise.all([
88-
dispatch(updatePagination(pagination)),
89-
dispatch(fetchService(pagination, filterObj)),
90-
dispatch(updateActiveFilterItem(currentActiveFilterData)),
91-
])
92-
.then(() => dispatch(loaderActions.stopAIServiceListLoader()))
93-
.catch(() => dispatch(loaderActions.stopAIServiceListLoader()));
94-
};
84+
export const handleFilterChange = (pagination, filter) => async (dispatch) => {
85+
dispatch(loaderActions.startAIServiceListLoader());
86+
dispatch(updatePagination(pagination));
87+
dispatch(updateActiveFilterItem(filter));
88+
89+
await dispatch(fetchService(pagination, filter));
90+
dispatch(loaderActions.stopAIServiceListLoader());
91+
};
9592

9693
export const resetFilter =
9794
({ pagination }) =>
@@ -104,7 +101,7 @@ export const resetFilter =
104101

105102
const fetchFeedbackAPI = (orgId, serviceId, token) => {
106103
const apiName = APIEndpoints.USER.name;
107-
const path = `${APIPaths.FEEDBACK}?org_id=${orgId}&service_id=${serviceId}`;
104+
const path = `${APIPaths.FEEDBACK}?orgId=${orgId}&serviceId=${serviceId}`;
108105
const apiOptions = initializeAPIOptions(token);
109106
return getAPI(apiName, path, apiOptions);
110107
};
@@ -125,12 +122,10 @@ const submitFeedbackAPI = (feedbackObj, token) => {
125122
export const submitFeedback = (orgId, serviceId, feedback) => async (dispatch) => {
126123
const { token } = await dispatch(userActions.fetchAuthenticatedUser());
127124
const feedbackObj = {
128-
feedback: {
129-
org_id: orgId,
130-
service_id: serviceId,
131-
user_rating: parseFloat(feedback.rating).toFixed(1),
132-
comment: feedback.comment,
133-
},
125+
orgId,
126+
serviceId,
127+
userRating: Number(parseFloat(feedback.rating).toFixed(1)),
128+
comment: feedback.comment,
134129
};
135130
return submitFeedbackAPI(feedbackObj, token);
136131
};

src/Redux/actionCreators/ServiceDetailsActions.js

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const UPDATE_FREE_CALLS_INFO = "UPDATE_FREE_CALLS_INFO";
1414
export const UPDATE_TRAINING_DETAILS = "UPDATE_TRAINING_DETAILS";
1515
export const UPDATE_FREECALL_SIGNATURE = "UPDATE_FREECALL_SIGNATURE";
1616

17-
const resetServiceDetails = (dispatch) => {
17+
const resetServiceDetails = () => (dispatch) => {
1818
dispatch({ type: RESET_SERVICE_DETAILS });
1919
};
2020

@@ -37,18 +37,37 @@ const fetchServiceDetailsAPI = async (orgId, serviceId) => {
3737
return response.json();
3838
};
3939

40-
export const fetchServiceDetails = (orgId, serviceId) => async (dispatch) => {
41-
try {
42-
dispatch(loaderActions.startAppLoader(LoaderContent.FETCH_SERVICE_DETAILS));
43-
dispatch(resetServiceDetails);
44-
dispatch(resetCurrentModelDetails());
45-
dispatch(resetModelList());
46-
const { data: serviceDetails } = await fetchServiceDetailsAPI(orgId, serviceId);
47-
dispatch(fetchServiceDetailsSuccess(serviceDetails));
48-
} catch (error) {
49-
dispatch(fetchServiceDetailsFailure(error));
50-
throw error;
40+
const enhanceGroup = (group) => ({ ...group, endpoints: group.endpoints.map(({ endpoint }) => endpoint) });
41+
42+
const parseGroupInfo = (groups) => {
43+
const serviceGroups = groups;
44+
const availableGroup = serviceGroups.find(({ endpoints }) =>
45+
endpoints.some((endpoint) => endpoint.isAvailable === 1)
46+
);
47+
if (availableGroup) {
48+
return enhanceGroup(availableGroup);
49+
}
50+
const firstGroup = serviceGroups[0];
51+
if (firstGroup) {
52+
return enhanceGroup(firstGroup);
53+
}
54+
};
55+
56+
const parsePricing = (group) => {
57+
if (!group) {
58+
return {};
5159
}
60+
61+
return group.pricing.find((price) => price.default === true);
62+
};
63+
64+
const parseServiceDetails = (service) => {
65+
const groupInfo = parseGroupInfo(service.groups);
66+
return {
67+
...service,
68+
groupInfo,
69+
pricing: parsePricing(groupInfo),
70+
};
5271
};
5372

5473
const fetchMeteringDataSuccess = (freeCallsAvailable, freeCallsTotal) => (dispatch) => {
@@ -65,22 +84,27 @@ const fetchTrainingModelSuccess = (serviceTrainingData) => (dispatch) => {
6584
dispatch({ type: UPDATE_TRAINING_DETAILS, payload: serviceTrainingData });
6685
};
6786

68-
const fetchServiceTrainingDataAPI = async (orgId, serviceId) => {
87+
export const fetchServiceDetails = (orgId, serviceId) => async (dispatch) => {
88+
if (!orgId || !serviceId) {
89+
console.error("orgId: ", orgId, "serviceId: ", serviceId);
90+
return;
91+
}
92+
6993
try {
70-
const dataForUrl = await fetchServiceDetailsAPI(orgId, serviceId);
71-
const url = `${dataForUrl.data.groups[0].endpoints[0].endpoint}/heartbeat`;
72-
const response = await fetch(url);
73-
return response.json();
94+
dispatch(loaderActions.startAppLoader(LoaderContent.FETCH_SERVICE_DETAILS));
95+
dispatch(resetServiceDetails());
96+
dispatch(resetCurrentModelDetails());
97+
dispatch(resetModelList());
98+
const { data: serviceDetails } = await fetchServiceDetailsAPI(orgId, serviceId);
99+
const parsedServiceDetails = parseServiceDetails(serviceDetails);
100+
dispatch(fetchServiceDetailsSuccess(parsedServiceDetails));
101+
dispatch(fetchTrainingModelSuccess(serviceDetails));
74102
} catch (error) {
75-
return {};
103+
dispatch(fetchServiceDetailsFailure(error));
104+
throw error;
76105
}
77106
};
78107

79-
export const fetchTrainingModel = (orgId, serviceId) => async (dispatch) => {
80-
const serviceTrainingData = await fetchServiceTrainingDataAPI(orgId, serviceId);
81-
dispatch(fetchTrainingModelSuccess(serviceTrainingData));
82-
};
83-
84108
const getAvailableFreeCalls = (orgId, serviceId, groupId) => async (dispatch) => {
85109
const {
86110
signature,

src/Redux/actionCreators/ServiceTrainingActions.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,6 @@ export const deleteModel = (organizationId, serviceId, modelId, methodName, serv
105105
}
106106
};
107107

108-
// export const getServiceName = () => (getState) => {
109-
// // const { serviceDetailsReducer, serviceTrainingReducer } = getState();
110-
// // if (serviceTrainingReducer.serviceName) {
111-
// // return serviceTrainingReducer.serviceName;
112-
// // }
113-
// const training = serviceDetailsReducer.training;
114-
// return getServiceNameFromTrainingMethod(training.trainingMethods[0]);
115-
// };
116-
117108
const getServiceNameFromTrainingMethod = (trainingMethod) => {
118109
return trainingMethod.split(".")[1].split("/")[0];
119110
};

0 commit comments

Comments
 (0)