aboutsummaryrefslogtreecommitdiff
path: root/users/ryan/modules/simple-bar/simple-bar-source/lib/components/yabai/stickies.jsx
blob: 703bf68fe8775434538ad3767c421902bd900342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import OpenedApps from "./opened-apps.jsx";
import { useYabaiContext } from "../yabai-context.jsx";
import { useSimpleBarContext } from "../simple-bar-context.jsx";
import * as Utils from "../../utils";

/**
 * Stickies component to display sticky windows.
 * @param {Object} props - Component properties.
 * @param {Object} props.display - The current display information.
 * @returns {JSX.Element|null} The rendered component or null if no sticky windows are present.
 */
export default function Stickies({ display }) {
  // Get windows from yabai context
  const { windows } = useYabaiContext();
  // Get settings from simple-bar context
  const { settings } = useSimpleBarContext();
  const { spacesDisplay } = settings;
  const { exclusionsAsRegex, hideDuplicateAppsInSpaces } = spacesDisplay;

  // Determine exclusions based on settings
  const exclusions = exclusionsAsRegex
    ? spacesDisplay.exclusions
    : spacesDisplay.exclusions.split(", ");
  const titleExclusions = exclusionsAsRegex
    ? spacesDisplay.titleExclusions
    : spacesDisplay.titleExclusions.split(", ");

  // Get sticky windows using a utility function
  const { stickyWindows: apps } = Utils.stickyWindowWorkaround({
    windows,
    uniqueApps: hideDuplicateAppsInSpaces,
    currentDisplay: display,
    currentSpace: undefined,
    exclusions,
    titleExclusions,
    exclusionsAsRegex,
  });

  // Filter out minimized sticky windows
  const notMinimizedStikies = apps.filter((app) => {
    const { "is-minimized": isMinimized, minimized: __legacyIsMinimized } = app;
    return !(isMinimized || __legacyIsMinimized);
  });

  // Return null if no non-minimized sticky windows are present
  if (!notMinimizedStikies?.length) return null;

  // Render the sticky windows
  return (
    <div className="stickies">
      <div className="stickies__inner">
        <OpenedApps apps={apps} />
      </div>
    </div>
  );
}