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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy