Skip to content

Apps Marketplace #699

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 6 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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