Skip to content

Commit c2542e4

Browse files
authored
Merge pull request #699 from raheeliftikhar5/marketplace_endpoints
Apps Marketplace
2 parents 878dfaa + 61c166b commit c2542e4

35 files changed

+338
-45
lines changed
Lines changed: 2 additions & 2 deletions
Loading
Lines changed: 12 additions & 0 deletions
Loading
Lines changed: 16 additions & 0 deletions
Loading

client/packages/lowcoder-design/src/icons/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,13 @@ export { ReactComponent as HomeModuleIcon } from "./icon-application-module.svg"
176176
export { ReactComponent as HomeQueryLibraryIcon } from "./icon-application-query-library.svg";
177177
export { ReactComponent as HomeDataSourceIcon } from "./icon-application-datasource.svg";
178178
export { ReactComponent as RecyclerIcon } from "./icon-application-recycler.svg";
179+
export { ReactComponent as MarketplaceIcon } from "./icon-application-marketplace.svg";
179180
export { ReactComponent as HomeActiveIcon } from "./icon-application-home-active.svg";
180181
export { ReactComponent as HomeModuleActiveIcon } from "./icon-application-module-active.svg";
181182
export { ReactComponent as HomeQueryLibraryActiveIcon } from "./icon-application-query-library-active.svg";
182183
export { ReactComponent as HomeDataSourceActiveIcon } from "./icon-application-datasource-active.svg";
183184
export { ReactComponent as RecyclerActiveIcon } from "./icon-application-recycler-active.svg";
185+
export { ReactComponent as MarketplaceActiveIcon } from "./icon-application-marketplace-active.svg";
184186
export { ReactComponent as FavoritesIcon } from "./icon-application-favorites.svg";
185187
export { ReactComponent as HomeSettingIcon } from "./icon-application-setting.svg";
186188
export { ReactComponent as FolderIcon } from "./icon-application-folder.svg";

client/packages/lowcoder/src/api/applicationApi.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ class ApplicationApi extends Api {
7878
static newURLPrefix = "/applications";
7979
static fetchHomeDataURL = "/v1/applications/home";
8080
static createApplicationURL = "/v1/applications";
81+
static fetchAllMarketplaceAppsURL = "/v1/applications/marketplace-apps";
8182
static deleteApplicationURL = (applicationId: string) => `/v1/applications/${applicationId}`;
8283
static getAppPublishInfoURL = (applicationId: string) => `/v1/applications/${applicationId}/view`;
8384
static getAppEditingInfoURL = (applicationId: string) => `/v1/applications/${applicationId}`;
@@ -92,6 +93,9 @@ class ApplicationApi extends Api {
9293
`/v1/applications/${applicationId}/permissions/${permissionId}`;
9394
static createFromTemplateURL = `/v1/applications/createFromTemplate`;
9495
static publicToAllURL = (applicationId: string) => `/applications/${applicationId}/public-to-all`;
96+
static publicToMarketplaceURL = (applicationId: string) => `/v1/applications/${applicationId}/public-to-marketplace`;
97+
static getMarketplaceAppURL = (applicationId: string) => `/v1/applications/${applicationId}/view_marketplace`;
98+
9599

96100
static fetchHomeData(request: HomeDataPayload): AxiosPromise<HomeDataResponse> {
97101
return Api.get(ApplicationApi.fetchHomeDataURL, request);
@@ -167,7 +171,9 @@ class ApplicationApi extends Api {
167171
const url =
168172
type === "published"
169173
? ApplicationApi.getAppPublishInfoURL(applicationId)
170-
: ApplicationApi.getAppEditingInfoURL(applicationId);
174+
: type === "view_marketplace"
175+
? ApplicationApi.getMarketplaceAppURL(applicationId)
176+
: ApplicationApi.getAppEditingInfoURL(applicationId);
171177
return Api.get(url);
172178
}
173179

@@ -211,6 +217,20 @@ class ApplicationApi extends Api {
211217
publicToAll: publicToAll,
212218
});
213219
}
220+
221+
static publicToMarketplace(appId: string, publicToMarketplace: boolean) {
222+
return Api.put(ApplicationApi.publicToMarketplaceURL(appId), {
223+
publicToMarketplace,
224+
});
225+
}
226+
227+
static fetchAllMarketplaceApps() {
228+
return Api.get(ApplicationApi.fetchAllMarketplaceAppsURL);
229+
}
230+
231+
static getMarketplaceApp(appId: string) {
232+
return Api.get(ApplicationApi.getMarketplaceAppURL(appId));
233+
}
214234
}
215235

216236
export default ApplicationApi;

client/packages/lowcoder/src/api/orgApi.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export interface CreateOrgResponse extends ApiResponse {
2929
data: { orgId: string };
3030
}
3131

32+
export interface OrgAPIUsageResponse extends ApiResponse {
33+
data: number;
34+
}
35+
3236
export class OrgApi extends Api {
3337
static createGroupURL = "/v1/groups";
3438
static updateGroupURL = (groupId: string) => `/v1/groups/${groupId}/update`;
@@ -47,6 +51,7 @@ export class OrgApi extends Api {
4751
static createOrgURL = "/v1/organizations";
4852
static deleteOrgURL = (orgId: string) => `/v1/organizations/${orgId}`;
4953
static updateOrgURL = (orgId: string) => `/v1/organizations/${orgId}/update`;
54+
static fetchUsage = (orgId: string) => `/v1/organizations/${orgId}/api-usage`;
5055

5156
static createGroup(request: { name: string }): AxiosPromise<GenericApiResponse<OrgGroup>> {
5257
return Api.post(OrgApi.createGroupURL, request);
@@ -127,6 +132,10 @@ export class OrgApi extends Api {
127132
static updateOrg(request: UpdateOrgPayload): AxiosPromise<ApiResponse> {
128133
return Api.put(OrgApi.updateOrgURL(request.id), request);
129134
}
135+
136+
static fetchAPIUsage(orgId: string, lastMonthOnly?: boolean): AxiosPromise<ApiResponse> {
137+
return Api.get(OrgApi.fetchUsage(orgId), lastMonthOnly);
138+
}
130139
}
131140

132141
export default OrgApi;

client/packages/lowcoder/src/app.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
IMPORT_APP_FROM_TEMPLATE_URL,
1515
INVITE_LANDING_URL,
1616
isAuthUnRequired,
17+
MARKETPLACE_URL,
1718
ORG_AUTH_LOGIN_URL,
1819
ORG_AUTH_REGISTER_URL,
1920
QUERY_LIBRARY_URL,
@@ -138,6 +139,7 @@ class AppIndex extends React.Component<AppIndexProps, any> {
138139
FOLDER_URL,
139140
TRASH_URL,
140141
SETTING,
142+
MARKETPLACE_URL,
141143
]}
142144
// component={ApplicationListPage}
143145
component={ApplicationHome}

client/packages/lowcoder/src/components/PermissionDialog/AppPermissionDialog.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,33 @@ function AppShareView(props: {
197197
}) {
198198
const { applicationId, permissionInfo, isModule } = props;
199199
const [isPublic, setPublic] = useState(permissionInfo.publicToAll);
200+
const [isPublicToMarketplace, setPublicToMarketplace] = useState(permissionInfo.publicToMarketplace);
200201
const dispatch = useDispatch();
201202
useEffect(() => {
202203
setPublic(permissionInfo.publicToAll);
203204
}, [permissionInfo.publicToAll]);
205+
useEffect(() => {
206+
setPublicToMarketplace(permissionInfo.publicToMarketplace);
207+
}, [permissionInfo.publicToMarketplace]);
204208
return (
205209
<div style={{ marginBottom: "22px" }}>
210+
<PermissionSwitchWrapper>
211+
<TacoSwitch
212+
checked={isPublicToMarketplace}
213+
onChange={(checked) => {
214+
setPublicToMarketplace(checked);
215+
ApplicationApi.publicToMarketplace(applicationId, checked)
216+
.then((resp) => {
217+
validateResponse(resp);
218+
dispatch(updateAppPermissionInfo({ publicToMarketplace: checked }));
219+
})
220+
.catch((e) => {
221+
messageInstance.error(e.message);
222+
});
223+
}}
224+
label={isModule ? 'Public module to marketplace' : 'Public app to marketplace'}
225+
/>
226+
</PermissionSwitchWrapper>
206227
<PermissionSwitchWrapper>
207228
<TacoSwitch
208229
checked={isPublic}

client/packages/lowcoder/src/comps/comps/selectInputComp/segmentedControl.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ const SegmentedControlBasicComp = (function () {
7979
return new UICompBuilder(SegmentChildrenMap, (props) => {
8080
const [
8181
validateState,
82-
handleValidate,
8382
handleChange,
8483
] = useSelectInputValidate(props);
8584
return props.label({

client/packages/lowcoder/src/comps/comps/selectInputComp/selectInputConstants.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export const useSelectInputValidate = (props: ValidationParams) => {
9191

9292
return [
9393
validateState,
94-
handleValidate,
94+
// handleValidate,
9595
handleChange,
9696
] as const;
9797
};

0 commit comments

Comments
 (0)