Skip to content

Commit d2a7bcc

Browse files
committed
App Publish and Versioning
1 parent c174d6b commit d2a7bcc

File tree

12 files changed

+715
-407
lines changed

12 files changed

+715
-407
lines changed

client/packages/lowcoder-design/src/components/Switch.tsx

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,24 @@ const SwitchStyle: any = styled.input`
5252
border-radius: 20px;
5353
background-color: #ffffff;
5454
}
55+
56+
&:disabled {
57+
background-color: #e0e0e0;
58+
opacity: 0.6;
59+
cursor: not-allowed;
60+
}
61+
62+
&:disabled::before {
63+
background-color: #cccccc;
64+
}
65+
66+
&:disabled:checked {
67+
background-color: #a0a0a0;
68+
}
69+
70+
&:disabled:hover {
71+
cursor: not-allowed;
72+
}
5573
`;
5674

5775
const SwitchDiv = styled.div<{
@@ -101,25 +119,31 @@ const JsIconGray = styled(jsIconGray)<Ishow>`
101119
${IconCss}
102120
`;
103121

104-
interface SwitchProps extends Omit<React.HTMLAttributes<HTMLInputElement>, "value" | "onChange"> {
122+
interface SwitchProps
123+
extends Omit<React.HTMLAttributes<HTMLInputElement>, "value" | "onChange"> {
105124
value: boolean;
106125
onChange: (value: boolean) => void;
126+
disabled?: boolean;
107127
}
108128

109129
export const Switch = (props: SwitchProps) => {
110-
const { value, onChange, ...inputChanges } = props;
130+
const { value, onChange, disabled, ...inputChanges } = props;
111131
return (
112132
<SwitchStyle
113133
type="checkbox"
114-
checked={props.value}
115-
onClick={() => props.onChange(!props.value)}
134+
checked={value}
135+
onClick={() => onChange(!value)}
116136
onChange={() => {}}
137+
disabled={disabled}
117138
{...inputChanges}
118139
/>
119140
);
120141
};
121142

122-
export const SwitchJsIcon = (props: { checked: boolean; onChange: (value: boolean) => void }) => {
143+
export const SwitchJsIcon = (props: {
144+
checked: boolean;
145+
onChange: (value: boolean) => void;
146+
}) => {
123147
const toggleShow = () => {
124148
props.onChange(!props.checked);
125149
};
@@ -154,15 +178,17 @@ export const SwitchWrapper = (props: {
154178
export function TacoSwitch(props: {
155179
label: string;
156180
checked: boolean;
157-
onChange: (checked: boolean) => void;
181+
disabled?: boolean;
182+
onChange?: (checked: boolean) => void;
158183
}) {
159184
return (
160185
<SwitchWrapper label={props.label}>
161186
<Switch
162187
onChange={(value) => {
163-
props.onChange(value);
188+
props.onChange ? props.onChange(value) : null;
164189
}}
165190
value={props.checked}
191+
disabled={props.disabled}
166192
/>
167193
</SwitchWrapper>
168194
);

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

Lines changed: 92 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
SetAppEditingStatePayload,
1313
UpdateAppPermissionPayload,
1414
} from "redux/reduxActions/applicationActions";
15-
import {ApiResponse, GenericApiResponse} from "./apiResponses";
15+
import { ApiResponse, GenericApiResponse } from "./apiResponses";
1616
import { JSONObject, JSONValue } from "util/jsonTypes";
1717
import {
1818
ApplicationDetail,
@@ -24,7 +24,10 @@ import {
2424
} from "constants/applicationConstants";
2525
import { CommonSettingResponseData } from "./commonSettingApi";
2626
import { ResourceType } from "@lowcoder-ee/constants/queryConstants";
27-
import {fetchAppRequestType, GenericApiPaginationResponse} from "@lowcoder-ee/util/pagination/type";
27+
import {
28+
fetchAppRequestType,
29+
GenericApiPaginationResponse,
30+
} from "@lowcoder-ee/util/pagination/type";
2831

2932
export interface HomeOrgMeta {
3033
id: string;
@@ -70,6 +73,11 @@ export interface ApplicationResp extends ApiResponse {
7073
data: ApplicationDetail;
7174
}
7275

76+
export interface ApplicationPublishRequest {
77+
commitMessage?: string;
78+
tag: string;
79+
}
80+
7381
interface GrantAppPermissionReq {
7482
applicationId: string;
7583
role: ApplicationRoleType;
@@ -82,38 +90,63 @@ class ApplicationApi extends Api {
8290
static fetchHomeDataURL = "/applications/home";
8391
static createApplicationURL = "/applications";
8492
static fetchAllMarketplaceAppsURL = "/applications/marketplace-apps";
85-
static deleteApplicationURL = (applicationId: string) => `/applications/${applicationId}`;
86-
static getAppPublishInfoURL = (applicationId: string) => `/applications/${applicationId}/view`;
87-
static getAppEditingInfoURL = (applicationId: string) => `/applications/${applicationId}`;
88-
static updateApplicationURL = (applicationId: string) => `/applications/${applicationId}`;
93+
static deleteApplicationURL = (applicationId: string) =>
94+
`/applications/${applicationId}`;
95+
static getAppPublishInfoURL = (applicationId: string) =>
96+
`/applications/${applicationId}/view`;
97+
static getAppEditingInfoURL = (applicationId: string) =>
98+
`/applications/${applicationId}`;
99+
static updateApplicationURL = (applicationId: string) =>
100+
`/applications/${applicationId}`;
89101
static getApplicationPermissionURL = (applicationId: string) =>
90102
`/applications/${applicationId}/permissions`;
91103
static grantAppPermissionURL = (applicationId: string) =>
92104
`/applications/${applicationId}/permissions`;
93105
static publishApplicationURL = (applicationId: string) =>
94106
`/applications/${applicationId}/publish`;
95-
static updateAppPermissionURL = (applicationId: string, permissionId: string) =>
96-
`/applications/${applicationId}/permissions/${permissionId}`;
107+
static updateAppPermissionURL = (
108+
applicationId: string,
109+
permissionId: string
110+
) => `/applications/${applicationId}/permissions/${permissionId}`;
97111
static createFromTemplateURL = `/applications/createFromTemplate`;
98-
static publicToAllURL = (applicationId: string) => `/applications/${applicationId}/public-to-all`;
99-
static publicToMarketplaceURL = (applicationId: string) => `/applications/${applicationId}/public-to-marketplace`;
100-
static getMarketplaceAppURL = (applicationId: string) => `/applications/${applicationId}/view_marketplace`;
101-
static setAppEditingStateURL = (applicationId: string) => `/applications/editState/${applicationId}`;
112+
static publicToAllURL = (applicationId: string) =>
113+
`/applications/${applicationId}/public-to-all`;
114+
static publicToMarketplaceURL = (applicationId: string) =>
115+
`/applications/${applicationId}/public-to-marketplace`;
116+
static getMarketplaceAppURL = (applicationId: string) =>
117+
`/applications/${applicationId}/view_marketplace`;
118+
static setAppEditingStateURL = (applicationId: string) =>
119+
`/applications/editState/${applicationId}`;
102120
static serverSettingsURL = () => `/serverSettings`;
103121

104-
static fetchHomeData(request: HomeDataPayload): AxiosPromise<HomeDataResponse> {
122+
static fetchHomeData(
123+
request: HomeDataPayload
124+
): AxiosPromise<HomeDataResponse> {
105125
return Api.get(ApplicationApi.fetchHomeDataURL, request);
106126
}
107127

108-
static fetchAllApplications(request: HomeDataPayload): AxiosPromise<ApplicationMeta[]> {
109-
return Api.get(ApplicationApi.newURLPrefix + "/list", { ...request, withContainerSize: false });
128+
static fetchAllApplications(
129+
request: HomeDataPayload
130+
): AxiosPromise<ApplicationMeta[]> {
131+
return Api.get(ApplicationApi.newURLPrefix + "/list", {
132+
...request,
133+
withContainerSize: false,
134+
});
110135
}
111136

112-
static fetchAllApplicationsPagination(request: fetchAppRequestType): AxiosPromise<GenericApiPaginationResponse<ApplicationMeta[]>> {
113-
return Api.get(ApplicationApi.newURLPrefix + "/list", { ...request, withContainerSize: false, applicationStatus: "RECYCLED" });
137+
static fetchAllApplicationsPagination(
138+
request: fetchAppRequestType
139+
): AxiosPromise<GenericApiPaginationResponse<ApplicationMeta[]>> {
140+
return Api.get(ApplicationApi.newURLPrefix + "/list", {
141+
...request,
142+
withContainerSize: false,
143+
applicationStatus: "RECYCLED",
144+
});
114145
}
115146

116-
static fetchAllModules(request: HomeDataPayload): AxiosPromise<ApplicationMeta[]> {
147+
static fetchAllModules(
148+
request: HomeDataPayload
149+
): AxiosPromise<ApplicationMeta[]> {
117150
return Api.get(ApplicationApi.newURLPrefix + "/list", {
118151
applicationType: AppTypeEnum.Module,
119152
applicationStatus: "NORMAL",
@@ -122,11 +155,15 @@ class ApplicationApi extends Api {
122155
});
123156
}
124157

125-
static fetchRecycleList(): AxiosPromise<GenericApiResponse<ApplicationMeta[]>> {
158+
static fetchRecycleList(): AxiosPromise<
159+
GenericApiResponse<ApplicationMeta[]>
160+
> {
126161
return Api.get(ApplicationApi.newURLPrefix + "/recycle/list");
127162
}
128163

129-
static createApplication(request: CreateApplicationPayload): AxiosPromise<ApplicationResp> {
164+
static createApplication(
165+
request: CreateApplicationPayload
166+
): AxiosPromise<ApplicationResp> {
130167
return Api.post(ApplicationApi.createApplicationURL, {
131168
orgId: request.orgId,
132169
name: request.applicationName,
@@ -145,19 +182,25 @@ class ApplicationApi extends Api {
145182
static recycleApplication(
146183
request: RecycleApplicationPayload
147184
): AxiosPromise<GenericApiResponse<Boolean>> {
148-
return Api.put(ApplicationApi.newURLPrefix + `/recycle/${request.applicationId}`);
185+
return Api.put(
186+
ApplicationApi.newURLPrefix + `/recycle/${request.applicationId}`
187+
);
149188
}
150189

151190
static restoreApplication(
152191
request: RestoreApplicationPayload
153192
): AxiosPromise<GenericApiResponse<Boolean>> {
154-
return Api.put(ApplicationApi.newURLPrefix + `/restore/${request.applicationId}`);
193+
return Api.put(
194+
ApplicationApi.newURLPrefix + `/restore/${request.applicationId}`
195+
);
155196
}
156197

157198
static deleteApplication(
158199
request: DeleteApplicationPayload
159200
): AxiosPromise<GenericApiResponse<Boolean>> {
160-
return Api.delete(ApplicationApi.deleteApplicationURL(request.applicationId));
201+
return Api.delete(
202+
ApplicationApi.deleteApplicationURL(request.applicationId)
203+
);
161204
}
162205

163206
static updateApplication(request: {
@@ -170,11 +213,18 @@ class ApplicationApi extends Api {
170213
return Api.put(ApplicationApi.updateApplicationURL(applicationId), rest);
171214
}
172215

173-
static publishApplication(request: PublishApplicationPayload): AxiosPromise<ApiResponse> {
174-
return Api.post(ApplicationApi.publishApplicationURL(request.applicationId));
216+
static publishApplication(
217+
request: PublishApplicationPayload
218+
): AxiosPromise<ApiResponse> {
219+
return Api.post(
220+
ApplicationApi.publishApplicationURL(request.applicationId),
221+
request?.request
222+
);
175223
}
176224

177-
static getApplicationDetail(request: FetchAppInfoPayload): AxiosPromise<ApplicationResp> {
225+
static getApplicationDetail(
226+
request: FetchAppInfoPayload
227+
): AxiosPromise<ApplicationResp> {
178228
const { type, applicationId } = request;
179229
const url =
180230
type === "published"
@@ -185,13 +235,20 @@ class ApplicationApi extends Api {
185235
return Api.get(url);
186236
}
187237

188-
static getApplicationPermissions(applicationId: string): AxiosPromise<AppPermissionResponse> {
238+
static getApplicationPermissions(
239+
applicationId: string
240+
): AxiosPromise<AppPermissionResponse> {
189241
return Api.get(ApplicationApi.getApplicationPermissionURL(applicationId));
190242
}
191243

192-
static grantAppPermission(request: GrantAppPermissionReq): AxiosPromise<AppPermissionResponse> {
244+
static grantAppPermission(
245+
request: GrantAppPermissionReq
246+
): AxiosPromise<AppPermissionResponse> {
193247
const { applicationId, ...requestParam } = request;
194-
return Api.put(ApplicationApi.grantAppPermissionURL(applicationId), requestParam);
248+
return Api.put(
249+
ApplicationApi.grantAppPermissionURL(applicationId),
250+
requestParam
251+
);
195252
}
196253

197254
static updateAppPermission(
@@ -208,7 +265,9 @@ class ApplicationApi extends Api {
208265
request: DeleteAppPermissionPayload
209266
): AxiosPromise<AppPermissionResponse> {
210267
const { applicationId, permissionId } = request;
211-
return Api.delete(ApplicationApi.updateAppPermissionURL(applicationId, permissionId));
268+
return Api.delete(
269+
ApplicationApi.updateAppPermissionURL(applicationId, permissionId)
270+
);
212271
}
213272

214273
static createFromTemplate(templateId: string): AxiosPromise<ApplicationResp> {
@@ -240,7 +299,9 @@ class ApplicationApi extends Api {
240299
return Api.get(ApplicationApi.getMarketplaceAppURL(appId));
241300
}
242301

243-
static setAppEditingState(request: SetAppEditingStatePayload): AxiosPromise<ApplicationResp> {
302+
static setAppEditingState(
303+
request: SetAppEditingStatePayload
304+
): AxiosPromise<ApplicationResp> {
244305
const { applicationId, editingFinished } = request;
245306
return Api.put(ApplicationApi.setAppEditingStateURL(applicationId), {
246307
editingFinished,

0 commit comments

Comments
 (0)