Skip to content

Commit 5517707

Browse files
added data loading indicator types(skeleton/spinner) in theme settings
1 parent 7105d7b commit 5517707

File tree

6 files changed

+55
-4
lines changed

6 files changed

+55
-4
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface ThemeDetail {
7878
components?: Record<string, JSONObject>;
7979
showComponentLoadingIndicators?: boolean;
8080
showDataLoadingIndicators?: boolean;
81+
dataLoadingIndicator?: string;
8182
}
8283

8384
export function getThemeDetailName(key: keyof ThemeDetail) {

client/packages/lowcoder/src/components/ModuleLoading.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import LoadingOutlined from "@ant-design/icons/LoadingOutlined";
12
import { default as Spin } from "antd/es/spin";
23
import { GreyTextColor } from "constants/style";
34
import styled from "styled-components";
@@ -14,7 +15,7 @@ export const LoadingPlaceholder = styled.div`
1415
export function ModuleLoading() {
1516
return (
1617
<LoadingPlaceholder>
17-
<Spin />
18+
<Spin indicator={<LoadingOutlined style={{ fontSize: 15 }} spin />} />
1819
</LoadingPlaceholder>
1920
);
2021
}

client/packages/lowcoder/src/components/ThemeSettingsSelector.tsx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ConfigItem, Radius, Margin, Padding, GridColumns, BorderWidth, BorderSt
44
import { isValidColor, isValidGradient, toHex } from "components/colorSelect/colorUtils";
55
import { ColorSelect } from "components/colorSelect";
66
import { TacoInput } from "components/tacoInput";
7-
import { Slider, Switch } from "antd";
7+
import { Segmented, Slider, Switch } from "antd";
88
import {
99
ExpandIcon,
1010
CompressIcon,
@@ -28,6 +28,7 @@ export type configChangeParams = {
2828
components?: Record<string, object>,
2929
showComponentLoadingIndicators?: boolean;
3030
showDataLoadingIndicators?: boolean;
31+
dataLoadingIndicator?: string;
3132
gridColumns?: string;
3233
gridRowHeight?: string;
3334
gridRowCount?: number;
@@ -58,6 +59,7 @@ type ColorConfigProps = {
5859
padding?: string;
5960
showComponentLoadingIndicators?: boolean;
6061
showDataLoadingIndicators?: boolean;
62+
dataLoadingIndicator?: string;
6163
gridColumns?: string;
6264
gridRowHeight?: string;
6365
gridRowCount?: number;
@@ -87,6 +89,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
8789
fontFamily: defaultFontFamily,
8890
showComponentLoadingIndicators: defaultShowComponentLoaders,
8991
showDataLoadingIndicators: defaultShowDataLoaders,
92+
dataLoadingIndicator: defaultDataLoadingIndicator,
9093
gridColumns: defaultGridColumns,
9194
gridRowHeight: defaultGridRowHeight,
9295
gridRowCount: defaultGridRowCount,
@@ -110,6 +113,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
110113
const [fontFamily, setFontFamily] = useState(defaultFontFamily);
111114
const [showComponentLoaders, setComponentLoaders] = useState(defaultShowComponentLoaders);
112115
const [showDataLoaders, setDataLoaders] = useState(defaultShowDataLoaders);
116+
const [dataLoadingIndicator, setDataLoadingIndicator] = useState(defaultDataLoadingIndicator);
113117
const [gridColumns, setGridColumns] = useState(defaultGridColumns);
114118
const [gridRowHeight, setGridRowHeight] = useState(defaultGridRowHeight);
115119
const [gridRowCount, setGridRowCount] = useState(defaultGridRowCount);
@@ -346,6 +350,10 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
346350
setDataLoaders(defaultShowDataLoaders);
347351
}, [defaultShowDataLoaders]);
348352

353+
useEffect(() => {
354+
setDataLoadingIndicator(defaultDataLoadingIndicator);
355+
}, [defaultDataLoadingIndicator]);
356+
349357
useEffect(() => {
350358
setGridPaddingX(defaultGridPaddingX);
351359
}, [defaultGridPaddingX]);
@@ -375,6 +383,7 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
375383
themeSettingKey !== "fontFamily" &&
376384
themeSettingKey !== "showComponentLoadingIndicators" &&
377385
themeSettingKey !== "showDataLoadingIndicators" &&
386+
themeSettingKey !== "dataLoadingIndicator" &&
378387
themeSettingKey !== "gridColumns" &&
379388
themeSettingKey !== "gridRowHeight" &&
380389
themeSettingKey !== "gridRowCount" &&
@@ -551,6 +560,25 @@ export default function ThemeSettingsSelector(props: ColorConfigProps) {
551560
</div>
552561
)}
553562

563+
{themeSettingKey === "dataLoadingIndicator" && (
564+
<div style={{
565+
marginTop: '6px',
566+
}}>
567+
<Segmented
568+
block
569+
value={dataLoadingIndicator}
570+
options={[
571+
{ value: 'spinner', label: 'Spinner' },
572+
{ value: 'skeleton', label: 'Skeleton' },
573+
]}
574+
onChange={(value) => {
575+
setDataLoadingIndicator(value)
576+
configChange({ themeSettingKey, dataLoadingIndicator: value});
577+
}}
578+
/>
579+
</div>
580+
)}
581+
554582
{themeSettingKey === "gridColumns" && (
555583
<div className="config-input">
556584
<GridColumns $gridColumns={defaultGridColumns || "24"}>

client/packages/lowcoder/src/constants/themeConstants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const theme = {
2828
animationIterationCount: "",
2929
showComponentLoadingIndicators: true,
3030
showDataLoadingIndicators: true,
31+
dataLoadingIndicatpr: 'spinner',
3132
gridBgImageSize: "cover",
3233
gridBgImagePosition: "center",
3334
gridBgImageRepeat: "no-repeat",

client/packages/lowcoder/src/pages/setting/theme/detail/index.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import { Card, Collapse, CollapseProps, Divider, Flex, List, Tooltip } from 'ant
4545

4646
import { ThemeCompPanel } from "pages/setting/theme/ThemeCompPanel";
4747
import { JSONObject } from "@lowcoder-ee/util/jsonTypes";
48-
import Switch from "antd/es/switch";
4948

5049
const ThemeSettingsView = styled.div`
5150
font-size: 14px;
@@ -174,7 +173,7 @@ class ThemeDetailPage extends React.Component<ThemeDetailPageProps, ThemeDetailP
174173
this.setState({
175174
theme: {
176175
...this.state.theme,
177-
[params.themeSettingKey]: params.color || params.radius || params.chart || params.margin || params.padding || params.borderWidth || params.borderStyle || params.fontFamily || params.showComponentLoadingIndicators || params.showDataLoadingIndicators || params.gridColumns || params.gridRowHeight || params.gridRowCount || params.gridPaddingX || params.gridPaddingY || params.gridBgImage || params.gridBgImageRepeat || params.gridBgImageSize || params.gridBgImagePosition || params.gridBgImageOrigin,
176+
[params.themeSettingKey]: params.color || params.radius || params.chart || params.margin || params.padding || params.borderWidth || params.borderStyle || params.fontFamily || params.showComponentLoadingIndicators || params.showDataLoadingIndicators || params.dataLoadingIndicator || params.gridColumns || params.gridRowHeight || params.gridRowCount || params.gridPaddingX || params.gridPaddingY || params.gridBgImage || params.gridBgImageRepeat || params.gridBgImageSize || params.gridBgImagePosition || params.gridBgImageOrigin,
178177
},
179178
});
180179
}
@@ -315,6 +314,13 @@ class ThemeDetailPage extends React.Component<ThemeDetailPageProps, ThemeDetailP
315314
type: "showDataLoadingIndicators",
316315
value: this.state.theme?.showDataLoadingIndicators,
317316
},
317+
{
318+
settingsKey: 'dataLoadingIndicator',
319+
name: trans('themeDetail.dataLoadingIndicator'),
320+
desc: '',
321+
type: "dataLoadingIndicator",
322+
value: this.state.theme?.dataLoadingIndicator,
323+
},
318324
]
319325
},
320326
];
@@ -782,6 +788,17 @@ class ThemeDetailPage extends React.Component<ThemeDetailPageProps, ThemeDetailP
782788
}}
783789
/>
784790
}
791+
{layoutSettingsItem.type == "dataLoadingIndicator" &&
792+
<ThemeSettingsSelector
793+
themeSettingKey={layoutSettingsItem.settingsKey}
794+
name={layoutSettingsItem.name}
795+
dataLoadingIndicator={layoutSettingsItem.value as string}
796+
configChange={(params) => {
797+
this.configChange(params);
798+
}}
799+
showVarName={false}
800+
/>
801+
}
785802
</List.Item>
786803
</Tooltip>
787804
))}

client/packages/lowcoder/src/pages/setting/theme/themeConstant.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export const themeTemplateList = [
3434
padding: "3px",
3535
showComponentLoadingIndicators: true,
3636
showDataLoadingIndicators: true,
37+
dataLoadingIndicator: 'spinner',
3738
},
3839
},
3940
{
@@ -53,6 +54,7 @@ export const themeTemplateList = [
5354
padding: "3px",
5455
showComponentLoadingIndicators: true,
5556
showDataLoadingIndicators: true,
57+
dataLoadingIndicator: 'spinner',
5658
},
5759
},
5860
{
@@ -72,6 +74,7 @@ export const themeTemplateList = [
7274
padding: "3px",
7375
showComponentLoadingIndicators: true,
7476
showDataLoadingIndicators: true,
77+
dataLoadingIndicator: 'spinner',
7578
},
7679
},
7780
];

0 commit comments

Comments
 (0)