Skip to content

Dev - update #702

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Feb 22, 2024
Merged
Prev Previous commit
Next Next commit
added marketplace endpoints
  • Loading branch information
raheeliftikhar5 committed Feb 21, 2024
commit f808455179381a2b34b1567cba243185f6fb6542
22 changes: 21 additions & 1 deletion client/packages/lowcoder/src/api/applicationApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class ApplicationApi extends Api {
static newURLPrefix = "/applications";
static fetchHomeDataURL = "/v1/applications/home";
static createApplicationURL = "/v1/applications";
static fetchAllMarketplaceAppsURL = "/v1/applications/marketplace-apps";
static deleteApplicationURL = (applicationId: string) => `/v1/applications/${applicationId}`;
static getAppPublishInfoURL = (applicationId: string) => `/v1/applications/${applicationId}/view`;
static getAppEditingInfoURL = (applicationId: string) => `/v1/applications/${applicationId}`;
Expand All @@ -92,6 +93,9 @@ class ApplicationApi extends Api {
`/v1/applications/${applicationId}/permissions/${permissionId}`;
static createFromTemplateURL = `/v1/applications/createFromTemplate`;
static publicToAllURL = (applicationId: string) => `/applications/${applicationId}/public-to-all`;
static publicToMarketplaceURL = (applicationId: string) => `/v1/applications/${applicationId}/public-to-marketplace`;
static getMarketplaceAppURL = (applicationId: string) => `/v1/applications/${applicationId}/view_marketplace`;


static fetchHomeData(request: HomeDataPayload): AxiosPromise<HomeDataResponse> {
return Api.get(ApplicationApi.fetchHomeDataURL, request);
Expand Down Expand Up @@ -167,7 +171,9 @@ class ApplicationApi extends Api {
const url =
type === "published"
? ApplicationApi.getAppPublishInfoURL(applicationId)
: ApplicationApi.getAppEditingInfoURL(applicationId);
: type === "view_marketplace"
? ApplicationApi.getMarketplaceAppURL(applicationId)
: ApplicationApi.getAppEditingInfoURL(applicationId);
return Api.get(url);
}

Expand Down Expand Up @@ -211,6 +217,20 @@ class ApplicationApi extends Api {
publicToAll: publicToAll,
});
}

static publicToMarketplace(appId: string, publicToMarketplace: boolean) {
return Api.put(ApplicationApi.publicToMarketplaceURL(appId), {
publicToMarketplace,
});
}

static fetchAllMarketplaceApps() {
return Api.get(ApplicationApi.fetchAllMarketplaceAppsURL);
}

static getMarketplaceApp(appId: string) {
return Api.get(ApplicationApi.getMarketplaceAppURL(appId));
}
}

export default ApplicationApi;
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ export const ReduxActionTypes = {
FETCH_ALL_APPLICATIONS_SUCCESS: "FETCH_ALL_APPLICATIONS_SUCCESS",
FETCH_ALL_MODULES_INIT: "FETCH_ALL_MODULES_INIT",
FETCH_ALL_MODULES_SUCCESS: "FETCH_ALL_MODULES_SUCCESS",
FETCH_ALL_MARKETPLACE_APPS: "FETCH_ALL_MARKETPLACE_APPS",
FETCH_ALL_MARKETPLACE_APPS_SUCCESS: "FETCH_ALL_MARKETPLACE_APPS_SUCCESS",

/* user profile */
SET_USER_PROFILE_SETTING_MODAL_VISIBLE: "SET_USER_PROFILE_SETTING_MODAL_VISIBLE",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const initialState: ApplicationReduxState = {
applicationList: [],
modules: [],
recycleList: [],
marketplace: [],
loadingStatus: {
isFetchingHomeData: false,
fetchHomeDataFinished: false,
Expand Down Expand Up @@ -98,6 +99,13 @@ const usersReducer = createReducer(initialState, {
...state,
recycleList: action.payload,
}),
[ReduxActionTypes.FETCH_ALL_MARKETPLACE_APPS_SUCCESS]: (
state: ApplicationReduxState,
action: ReduxAction<ApplicationMeta[]>
): ApplicationReduxState => ({
...state,
marketplace: action.payload,
}),
[ReduxActionTypes.CREATE_APPLICATION_INIT]: (
state: ApplicationReduxState
): ApplicationReduxState => ({
Expand Down Expand Up @@ -336,6 +344,7 @@ export interface ApplicationReduxState {
applicationList: ApplicationMeta[];
modules: ApplicationMeta[];
recycleList: ApplicationMeta[];
marketplace: ApplicationMeta[];
appPermissionInfo?: AppPermissionInfo;
currentApplication?: ApplicationMeta;
templateId?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ export const fetchApplicationRecycleList = () => ({
type: ReduxActionTypes.FETCH_APPLICATION_RECYCLE_LIST_INIT,
});

export const fetchAllMarketplaceApps = () => ({
type: ReduxActionTypes.FETCH_ALL_MARKETPLACE_APPS,
});

export type CreateApplicationPayload = {
applicationName: string;
applicationType: AppTypeEnum;
Expand Down
22 changes: 22 additions & 0 deletions client/packages/lowcoder/src/redux/sagas/applicationSagas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,24 @@ function* fetchApplicationRecycleListSaga() {
}
}

function* fetchAllMarketplaceAppsSaga() {
try {
const response: AxiosResponse<GenericApiResponse<ApplicationMeta[]>> = yield call(
ApplicationApi.fetchAllMarketplaceApps
);
const isValidResponse: boolean = validateResponse(response);
if (isValidResponse) {
yield put({
type: ReduxActionTypes.FETCH_ALL_MARKETPLACE_APPS_SUCCESS,
payload: response.data.data,
});
}
} catch (error: any) {
messageInstance.error(error.message);
log.debug("fetch marketplace apps error: ", error);
}
}

export default function* applicationSagas() {
yield all([
takeLatest(ReduxActionTypes.FETCH_HOME_DATA, fetchHomeDataSaga),
Expand All @@ -393,5 +411,9 @@ export default function* applicationSagas() {
ReduxActionTypes.FETCH_APPLICATION_RECYCLE_LIST_INIT,
fetchApplicationRecycleListSaga
),
takeLatest(
ReduxActionTypes.FETCH_ALL_MARKETPLACE_APPS,
fetchAllMarketplaceAppsSaga,
),
]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ export const modulesSelector = (state: AppState): ApplicationMeta[] => state.ui.

export const recycleListSelector = (state: AppState) => state.ui.application.recycleList;

export const marketplaceSelector = (state: AppState) => state.ui.application.marketplace;

export const getHomeOrg = (state: AppState) => state.ui.application.homeOrg;

export const isFetchingHomeData = (state: AppState) =>
Expand Down