🏡 index : quine-global-labs/bazaar.git

using Gtk 4.0;
using Adw 1;

template $BzFavoritesTile: $BzListTile {
  accessibility {
    labelled-by: title_label;
    described-by: description_label;
  }

  child: Box {
    orientation: horizontal;
    spacing: 10;

    $BzTransactIcon {
      margin-start: 10;
      margin-top: 10;
      margin-bottom: 10;
      width-request: 48;
      height-request: 48;

      info: $BzTransactIconInfo {
        group: bind template.group as <$BzEntryGroup>;
        paintable: bind template.group as <$BzEntryGroup>.ui-entry as <$BzResult>.object as <$BzEntry>.icon-paintable;
      };
    }

    Box {
      orientation: vertical;
      valign: center;
      spacing: 4;

      Label title_label {
        xalign: 0.0;
        ellipsize: end;
        single-line-mode: true;
        tooltip-text: bind template.group as <$BzEntryGroup>.id;
        label: bind template.group as <$BzEntryGroup>.title;
      }

      Label description_label {
        halign: start;
        label: bind template.group as <$BzEntryGroup>.description;
        xalign: 0.0;
        ellipsize: end;
        single-line-mode: true;
        styles ["dim-label", "caption"]
      }
    }

    Button support_button {
      styles [
        "circular",
        "flat",
        "suggested-action",
        "support"
      ]

      tooltip-text: _("Support This Application");

      width-request: 32;
      height-request: 32;
      valign: center;
      icon-name: "heart-filled-symbolic";
      visible: bind $invert_boolean($is_null(template.group as <$BzEntryGroup>.donation-url) as <bool>) as <bool>;

      clicked => $support_cb() swapped;
    }

    Box {
      orientation: horizontal;
      spacing: 8;
      margin-end: 8;
      hexpand: true;
      halign: end;

      Button install_remove_button {
        styles [
          "flat",
        ]
        width-request: 32;
        height-request: 32;
        valign: center;
        visible: bind $invert_boolean($logical_and($is_zero(template.group as <$BzEntryGroup>.removable) as <bool>, $is_zero(template.group as <$BzEntryGroup>.installable) as <bool>) as <bool>) as <bool>;
        tooltip-text: bind $get_install_remove_tooltip(template.group as <$BzEntryGroup>.removable) as <string>;
        sensitive: bind $switch_bool(
                          template.group as <$BzEntryGroup>.removable,
                          $invert_boolean($is_zero(template.group as <$BzEntryGroup>.removable-and-available) as <bool>) as <bool>,
                          $invert_boolean($is_zero(template.group as <$BzEntryGroup>.installable-and-available) as <bool>) as <bool>,
                        ) as <bool>;
        icon-name: bind $get_install_remove_icon(template.group as <$BzEntryGroup>.removable) as <string>;
        clicked => $install_remove_cb() swapped;
      }

      Stack unfavorite_stack {
        transition-type: crossfade;
        StackPage {
          name: "button";
          child: Button unfavorite_button {
            styles [
              "flat",
            ]
            width-request: 32;
            height-request: 32;
            valign: center;
            tooltip-text: _("Remove From Favorites");
            icon-name: "bookmark-filled-symbolic";
            clicked => $unfavorite_cb() swapped;
          };
        }
        StackPage {
          name: "spinner";
          child: Adw.Spinner {
            halign: center;
            width-request: 16;
          };
        }
      }

      Image {
        pixel-size: 14;
        icon-name: "go-next-symbolic";
        margin-end: 4;
        styles ["dimmed"]
      }
    }
  };
}