diff --git a/src/wuttafarm/web/views/farmos/animals.py b/src/wuttafarm/web/views/farmos/animals.py index 44a1cdc..e11ff59 100644 --- a/src/wuttafarm/web/views/farmos/animals.py +++ b/src/wuttafarm/web/views/farmos/animals.py @@ -63,6 +63,7 @@ class AnimalView(AssetMasterView): } grid_columns = [ + "thumbnail", "drupal_id", "name", "produces_eggs", @@ -95,7 +96,7 @@ class AnimalView(AssetMasterView): ] def get_grid_data(self, **kwargs): - kwargs.setdefault("include", "animal_type,group,owner,location") + kwargs.setdefault("include", "image,animal_type,group,owner,location") return super().get_grid_data(**kwargs) def configure_grid(self, grid): diff --git a/src/wuttafarm/web/views/farmos/assets.py b/src/wuttafarm/web/views/farmos/assets.py index 1b81b35..c662cf8 100644 --- a/src/wuttafarm/web/views/farmos/assets.py +++ b/src/wuttafarm/web/views/farmos/assets.py @@ -54,6 +54,7 @@ class AssetMasterView(FarmOSMasterView): } grid_columns = [ + "thumbnail", "drupal_id", "name", "owners", @@ -69,7 +70,7 @@ class AssetMasterView(FarmOSMasterView): } def get_grid_data(self, columns=None, session=None, **kwargs): - kwargs.setdefault("include", "owner,location") + kwargs.setdefault("include", "image,owner,location") kwargs.setdefault("normalizer", self.normalize_asset) return ResourceData( self.config, @@ -82,6 +83,11 @@ class AssetMasterView(FarmOSMasterView): g = grid super().configure_grid(g) + # thumbnail + g.set_renderer("thumbnail", self.render_grid_thumbnail) + g.set_label("thumbnail", "", column_only=True) + g.set_centered("thumbnail") + # drupal_id g.set_label("drupal_id", "ID", column_only=True) g.set_sorter("drupal_id", SimpleSorter("drupal_internal__id")) @@ -103,6 +109,11 @@ class AssetMasterView(FarmOSMasterView): g.set_sorter("archived", SimpleSorter("archived")) g.set_filter("archived", BooleanFilter) + def render_grid_thumbnail(self, obj, field, value): + if url := obj.get("thumbnail_url"): + return tags.image(url, f"thumbnail for {self.get_model_title()}") + return None + def render_owners_for_grid(self, asset, field, value): owners = [] for user in value: @@ -203,6 +214,7 @@ class AssetMasterView(FarmOSMasterView): owner_names = [] location_objects = [] location_names = [] + thumbnail_url = None if relationships := asset.get("relationships"): if owners := relationships.get("owner"): @@ -226,6 +238,13 @@ class AssetMasterView(FarmOSMasterView): location_objects.append(location) location_names.append(location["name"]) + if images := relationships.get("image"): + for image in images["data"]: + if image := included.get(image["id"]): + thumbnail_url = image["attributes"]["image_style_uri"][ + "thumbnail" + ] + return { "uuid": asset["id"], "drupal_id": asset["attributes"]["drupal_internal__id"], @@ -237,6 +256,7 @@ class AssetMasterView(FarmOSMasterView): "locations": location_objects, "location_names": location_names, "archived": archived, + "thumbnail_url": thumbnail_url, } def configure_form(self, form):