users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/stickies.jsx

6ad98695409ab789b2b3b15c95de404daf46d1a7 · 1.9 KB · 56 lines raw

1 import OpenedApps from "./opened-apps.jsx";
2 import { useYabaiContext } from "../yabai-context.jsx";
3 import { useSimpleBarContext } from "../simple-bar-context.jsx";
4 import * as Utils from "../../utils";
5
6 /**
7 * Stickies component to display sticky windows.
8 * @param {Object} props - Component properties.
9 * @param {Object} props.display - The current display information.
10 * @returns {JSX.Element|null} The rendered component or null if no sticky windows are present.
11 */
12 export default function Stickies({ display }) {
13 // Get windows from yabai context
14 const { windows } = useYabaiContext();
15 // Get settings from simple-bar context
16 const { settings } = useSimpleBarContext();
17 const { spacesDisplay } = settings;
18 const { exclusionsAsRegex, hideDuplicateAppsInSpaces } = spacesDisplay;
19
20 // Determine exclusions based on settings
21 const exclusions = exclusionsAsRegex
22 ? spacesDisplay.exclusions
23 : spacesDisplay.exclusions.split(", ");
24 const titleExclusions = exclusionsAsRegex
25 ? spacesDisplay.titleExclusions
26 : spacesDisplay.titleExclusions.split(", ");
27
28 // Get sticky windows using a utility function
29 const { stickyWindows: apps } = Utils.stickyWindowWorkaround({
30 windows,
31 uniqueApps: hideDuplicateAppsInSpaces,
32 currentDisplay: display,
33 currentSpace: undefined,
34 exclusions,
35 titleExclusions,
36 exclusionsAsRegex,
37 });
38
39 // Filter out minimized sticky windows
40 const notMinimizedStikies = apps.filter((app) => {
41 const { "is-minimized": isMinimized, minimized: __legacyIsMinimized } = app;
42 return !(isMinimized || __legacyIsMinimized);
43 });
44
45 // Return null if no non-minimized sticky windows are present
46 if (!notMinimizedStikies?.length) return null;
47
48 // Render the sticky windows
49 return (
50 <div className="stickies">
51 <div className="stickies__inner">
52 <OpenedApps apps={apps} />
53 </div>
54 </div>
55 );
56 }