diff --git a/adminapp/src/pages/OrganizationDetailPage.jsx b/adminapp/src/pages/OrganizationDetailPage.jsx index cbac3322..5feffde0 100644 --- a/adminapp/src/pages/OrganizationDetailPage.jsx +++ b/adminapp/src/pages/OrganizationDetailPage.jsx @@ -36,7 +36,7 @@ export default function OrganizationDetailPage() { organizationLabel: `(${model.id}) ${model.name || "-"}`, })} addNewRole="organizationMembership" - headers={["Id", "Member", "Created At", "Updated At"]} + headers={["Id", "Member", "Created At"]} keyRowAttr="id" toCells={(row) => [ , @@ -44,7 +44,6 @@ export default function OrganizationDetailPage() { {row.member.name} , dayjs(row.createdAt).format("lll"), - dayjs(row.updatedAt).format("lll"), ]} /> diff --git a/adminapp/src/pages/PaymentTriggerDetailPage.jsx b/adminapp/src/pages/PaymentTriggerDetailPage.jsx index 0da4222f..3be90b31 100644 --- a/adminapp/src/pages/PaymentTriggerDetailPage.jsx +++ b/adminapp/src/pages/PaymentTriggerDetailPage.jsx @@ -18,7 +18,7 @@ export default function PaymentTriggerDetailPage() { { label: "ID", value: model.id }, { label: "Label", value: model.label }, { label: "Created At", value: dayjs(model.createdAt) }, - { label: "Updated At", value: model.updatedAt && dayjs(model.updatedAt) }, + { label: "Updated At", value: dayjs(model.updatedAt) }, { label: "Starting", value: dayjs(model.activeDuringBegin) }, { label: "Ending", value: dayjs(model.activeDuringEnd) }, { label: "Match Multiplier", value: model.matchMultiplier }, diff --git a/lib/suma/admin_api/anon_proxy.rb b/lib/suma/admin_api/anon_proxy.rb index 7262a27d..0559d961 100644 --- a/lib/suma/admin_api/anon_proxy.rb +++ b/lib/suma/admin_api/anon_proxy.rb @@ -37,12 +37,14 @@ class VendorAccountEntity < BaseEntity class DetailedVendorConfigurationEntity < VendorConfigurationEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :programs, with: ProgramEntity expose :instructions, with: TranslatedTextEntity end class DetailedVendorAccountEntity < VendorAccountEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :latest_access_code expose :latest_access_code_set_at expose :latest_access_code_requested_at diff --git a/lib/suma/admin_api/commerce_offering_products.rb b/lib/suma/admin_api/commerce_offering_products.rb index c5928132..a4f2b320 100644 --- a/lib/suma/admin_api/commerce_offering_products.rb +++ b/lib/suma/admin_api/commerce_offering_products.rb @@ -9,6 +9,7 @@ class Suma::AdminAPI::CommerceOfferingProducts < Suma::AdminAPI::V1 class DetailedCommerceOfferingProductEntity < BaseEntity include Suma::AdminAPI::Entities include AutoExposeBase + include AutoExposeDetail expose :offering, with: OfferingEntity expose :product, with: ProductEntity expose :customer_price, with: MoneyEntity diff --git a/lib/suma/admin_api/entities.rb b/lib/suma/admin_api/entities.rb index 934701b7..1252293c 100644 --- a/lib/suma/admin_api/entities.rb +++ b/lib/suma/admin_api/entities.rb @@ -25,7 +25,9 @@ def self.included(ctx) # detailed entities, or limited lists. module AutoExposeDetail def self.included(ctx) - ctx.expose :updated_at, if: ->(o) { o.respond_to?(:updated_at) } + ctx.expose :updated_at, if: ->(o) { o.respond_to?(:updated_at) } do |inst| + inst.updated_at || inst.created_at + end # Always expose an external links array when we mix this in ctx.expose :external_links do |inst| inst.respond_to?(:external_links) ? inst.external_links : [] diff --git a/lib/suma/admin_api/organizations.rb b/lib/suma/admin_api/organizations.rb index 047f01c6..a70249c0 100644 --- a/lib/suma/admin_api/organizations.rb +++ b/lib/suma/admin_api/organizations.rb @@ -8,6 +8,7 @@ class Suma::AdminAPI::Organizations < Suma::AdminAPI::V1 class DetailedOrganizationEntity < OrganizationEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :memberships, with: OrganizationMembershipEntity expose :program_enrollments, with: ProgramEnrollmentEntity end diff --git a/lib/suma/admin_api/program_enrollments.rb b/lib/suma/admin_api/program_enrollments.rb index e16bcabf..d8711858 100644 --- a/lib/suma/admin_api/program_enrollments.rb +++ b/lib/suma/admin_api/program_enrollments.rb @@ -4,8 +4,10 @@ class Suma::AdminAPI::ProgramEnrollments < Suma::AdminAPI::V1 include Suma::AdminAPI::Entities + class DetailedProgramEnrollmentEntity < ProgramEnrollmentEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :approved?, as: :approved expose :approved_by, with: MemberEntity expose :unenrolled?, as: :unenrolled diff --git a/lib/suma/admin_api/roles.rb b/lib/suma/admin_api/roles.rb index 3d9c332d..d3276018 100644 --- a/lib/suma/admin_api/roles.rb +++ b/lib/suma/admin_api/roles.rb @@ -6,7 +6,11 @@ class Suma::AdminAPI::Roles < Suma::AdminAPI::V1 class RoleEntity < Suma::AdminAPI::Entities::RoleEntity; end - class DetailedRoleEntity < RoleEntity; end + + class DetailedRoleEntity < RoleEntity + include Suma::AdminAPI::Entities + include AutoExposeDetail + end resource :roles do desc "Return all roles, ordered by name" diff --git a/lib/suma/admin_api/vendor_services.rb b/lib/suma/admin_api/vendor_services.rb index ddb99f81..5c63b275 100644 --- a/lib/suma/admin_api/vendor_services.rb +++ b/lib/suma/admin_api/vendor_services.rb @@ -9,6 +9,7 @@ class Suma::AdminAPI::VendorServices < Suma::AdminAPI::V1 class DetailedMobilityTripEntity < BaseEntity include Suma::AdminAPI::Entities include AutoExposeBase + include AutoExposeDetail expose :vehicle_id expose :vendor_service_rate, as: :rate, with: VendorServiceRateEntity expose :begin_lat @@ -23,6 +24,7 @@ class DetailedMobilityTripEntity < BaseEntity class DetailedVendorServiceEntity < VendorServiceEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :external_name expose :internal_name expose :mobility_vendor_adapter_key diff --git a/lib/suma/admin_api/vendors.rb b/lib/suma/admin_api/vendors.rb index 12a7c2c3..e1666244 100644 --- a/lib/suma/admin_api/vendors.rb +++ b/lib/suma/admin_api/vendors.rb @@ -8,6 +8,7 @@ class Suma::AdminAPI::Vendors < Suma::AdminAPI::V1 class DetailedVendorEntity < VendorEntity include Suma::AdminAPI::Entities + include AutoExposeDetail expose :slug expose :services, with: VendorServiceEntity expose :products, with: ProductEntity