diff --git a/doc/gui/extension/example_library/example_library.py b/doc/gui/extension/example_library/example_library.py index c66c7f870..acba0aeca 100644 --- a/doc/gui/extension/example_library/example_library.py +++ b/doc/gui/extension/example_library/example_library.py @@ -42,6 +42,16 @@ def __init__(self) -> None: # element, exported as GameTable in front-end/src/index.ts # react_component="GameTable", ), + "visual_label_list": Element( + "lov", + { + "lov": ElementProperty(PropertyType.lov), + "sort": ElementProperty(PropertyType.string), + }, + # The name of the React component (VisualLabelList) that implements this custom + # element, exported as LabeledItemList in front-end/src/index.ts + react_component="VisualLabelList", + ) } # The implementation of the rendering for the "fraction" static element diff --git a/doc/gui/extension/example_library/front-end/src/VisualLabelList.tsx b/doc/gui/extension/example_library/front-end/src/VisualLabelList.tsx new file mode 100644 index 000000000..793a6499a --- /dev/null +++ b/doc/gui/extension/example_library/front-end/src/VisualLabelList.tsx @@ -0,0 +1,50 @@ +import React, { useMemo } from "react"; +import { LoV, useLovListMemo } from "taipy-gui"; + +interface VisualLabelListProps { + lov?: LoV; + defaultLov?: string; + sort?: "asc" | "desc"; +} + +const styles = { + listItem: { + display: "flex", + alignItems: "center", + }, + image: { + marginRight: "8px", + width: "1em", + height: "1em", + }, +}; + +const VisualLabelList: React.FC = ({ lov, defaultLov = "", sort }) => { + const lovList = useLovListMemo(lov, defaultLov); + + const sortedLovList = useMemo(() => { + if (sort) { + return lovList.slice().sort((a, b) => { + return sort === "asc" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id); + }); + } + return lovList; + }, [lovList, sort]); + + return ( +
+ +
+ ); +}; + +export default VisualLabelList; diff --git a/doc/gui/extension/example_library/front-end/src/index.ts b/doc/gui/extension/example_library/front-end/src/index.ts index c7b47323e..c2de08c12 100644 --- a/doc/gui/extension/example_library/front-end/src/index.ts +++ b/doc/gui/extension/example_library/front-end/src/index.ts @@ -8,5 +8,6 @@ // the name used in the element declaration in the element library. import ColoredLabel from "./ColoredLabel"; import GameTable from "./GameTable"; +import VisualLabelList from "./VisualLabelList"; -export { ColoredLabel as ExampleLabel, GameTable }; +export { ColoredLabel as ExampleLabel, GameTable, VisualLabelList }; diff --git a/doc/gui/extension/images/cpp.png b/doc/gui/extension/images/cpp.png new file mode 100644 index 000000000..a02e2eaa6 Binary files /dev/null and b/doc/gui/extension/images/cpp.png differ diff --git a/doc/gui/extension/images/java.png b/doc/gui/extension/images/java.png new file mode 100644 index 000000000..78fa9c5d7 Binary files /dev/null and b/doc/gui/extension/images/java.png differ diff --git a/doc/gui/extension/images/javascript.png b/doc/gui/extension/images/javascript.png new file mode 100644 index 000000000..9f148627c Binary files /dev/null and b/doc/gui/extension/images/javascript.png differ diff --git a/doc/gui/extension/images/python.png b/doc/gui/extension/images/python.png new file mode 100644 index 000000000..a29196d44 Binary files /dev/null and b/doc/gui/extension/images/python.png differ diff --git a/doc/gui/extension/images/typescript.png b/doc/gui/extension/images/typescript.png new file mode 100644 index 000000000..ec4a95e24 Binary files /dev/null and b/doc/gui/extension/images/typescript.png differ diff --git a/doc/gui/extension/visual_label_list.py b/doc/gui/extension/visual_label_list.py new file mode 100644 index 000000000..73cc5efa5 --- /dev/null +++ b/doc/gui/extension/visual_label_list.py @@ -0,0 +1,28 @@ +# Copyright 2021-2024 Avaiga Private Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +from example_library import ExampleLibrary + +from taipy.gui import Gui, Icon + +languages = [ + ["Python", Icon("images/python.png", "Python logo")], + ["JavaScript", Icon("images/javascript.png", "JavaScript logo")], + ["TypeScript", Icon("images/typescript.png", "TypeScript logo")], + ["Java", Icon("images/java.png", "Java logo")], + ["C++", Icon("images/cpp.png", "C++ logo")], +] + +page = """ +<|{languages}|example.visual_label_list|sort=asc|> +""" + +if __name__ == "__main__": + Gui(page, libraries=[ExampleLibrary()]).run(title="List of item")