mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-15 19:17:42 +01:00
* feat: impl Coco server related APIs * chore: remove unused method * fix: invoke Rust interfaces in tauri::run() * chore: add invoke * feat: add add_coco_server * fix: trim the tailing forward slash * feat: interface get_user_profiles * chore: add * fix: store the servers in add interface * chore: ass * fix: skip non-publich servers with no token * feat: add * feat: get datasources and connectors * fix: invoke interfaces in tauri::run() * chore: add SidebarRef * refactor: refactoring coco-app * refactor: refactoring coco app * refactor: refactoring project layout * refactor: refactoring server management * chore: cleanup code * chore: display error when connect failed * refactor: refactoring refresh server's info * refactor: refactoring how to connect the coco serverg * chore: rename to cloud * refactor: refactoring remove coco server * fix: refresh current selected server * fix: reset server selection * chore: update login status * feat: add error message tips * fix: fix login and logout * refactor: refactoring http client * fix: fix the datasources * chore: minor fix * refactor: refactoring code * fix: fix search api * chore: optimize part of icons * chore: fix build * refactor: search list icon * refactor: search list icon * chore: lib * feat: add plugin-os --------- Co-authored-by: rain <15911122312@163.com> Co-authored-by: medcl <m@medcl.net>
27 lines
785 B
TypeScript
27 lines
785 B
TypeScript
import React, { useEffect, useState } from "react";
|
|
|
|
interface ThemedIconProps {
|
|
component: React.ElementType;
|
|
className?: string;
|
|
}
|
|
|
|
function ThemedIcon({ component: Component, className = "" }: ThemedIconProps) {
|
|
const [color, setColor] = useState("#000");
|
|
|
|
useEffect(() => {
|
|
const updateTheme = () => {
|
|
const isDark = document.body.classList.contains("dark");
|
|
setColor(isDark ? "#DCDCDC" : "#999");
|
|
};
|
|
|
|
updateTheme();
|
|
const observer = new MutationObserver(updateTheme);
|
|
observer.observe(document.body, { attributes: true, attributeFilter: ["class"] });
|
|
|
|
return () => observer.disconnect();
|
|
}, []);
|
|
|
|
return <Component className={className} color={color} />;
|
|
}
|
|
|
|
export default ThemedIcon; |