Skip to content

shelf@2.3.0

Latest

Choose a tag to compare

@DonKoko DonKoko released this 30 Sep 14:06
· 516 commits to main since this release
25704e8

🚀 Shelf 2.3.0

A release about seeing the whole picture while you work. The asset index can now roll your inventory up by model, Scan to Assign shows you exactly what is still left to pull, and scans from the Companion app finally say which device and app version made them. Around that sits a long list of fixes, most of them to quantity-tracked assets and bookings, so the numbers you see match what actually happened.


🌟 Highlights

📦 Asset models in the index

A new models view on the asset index lists your asset models instead of individual assets. It respects every filter and search you already have applied, so filtering to a location answers "which models do I have here, and how many".

Highlights include:

  • Per-model counts, availability and total value for whatever you have filtered to
  • Click a count to see the matching assets, using your own index columns

📋 Scan to Assign shows what is left

Scan to Assign now shows the same pull list and per-model progress as the check-out scanner. You no longer have to keep the reservation in your head, or switch screens, to know what still needs to be scanned. A partial scan still saves.

📱 Companion app scans you can trace

A scan made with the Companion app is now recorded with the device and app version, for example "Shelf app 1.3.0 on iPhone", instead of "Unknown device".

✨ Smaller touches

  • Every image upload field shows the saved image next to it, and previews a new one before you save. Kits, locations and workspaces show their saved image for the first time.
  • Signing up from a pricing link keeps the plan and trial you picked, so you are not asked to choose again.

⬆️ Upgrading

docker pull ghcr.io/shelf-nu/shelf.nu:2.3.0
# or, if you track :latest
docker pull ghcr.io/shelf-nu/shelf.nu:latest

This release requires a database migration. It adds six nullable columns and two indexes to UserBusinessIntel, used to record where a signup came from. Run it before starting the new version: onboarding a new user fails until the columns exist.


🚀 Features

  • feat(scan): attribute app scans as device + app version instead of "Unknown device" by @carlosvirreira in #2847
  • feat(signup): keep the plan, trial and campaign intent from the website through signup by @carlosvirreira in #3044
  • feat(forms): show the saved image on every image upload row, through one shared field by @carlosvirreira in #3089
  • feat(assets): asset model view for the asset index by @DonKoko in #3052
  • feat(bookings): show the pull list and per-model progress in Scan to Assign by @DonKoko in #3105

🐛 Fixes

  • fix(sso): revoke group-claim access the same way the admin path does by @carlosvirreira in #2843
  • fix(custody): scan quantity-tracked assets into and out of custody by @DonKoko in #3078
  • fix(billing): keep barcodes through an add-on lapse and end bundled add-ons with the tier by @carlosvirreira in #3024
  • fix(server): redact secrets from the request log line by @carlosvirreira in #3058
  • fix(organization): carry the spent free trial on every ownership transfer by @carlosvirreira in #3073
  • fix(subscription): show each workspace's plan and who pays for it by @DonKoko in #3091
  • fix(assets): count returned and used-up units as back on the shelf by @carlosvirreira in #3087
  • fix(locations): remove stored image files when a location is deleted by @carlosvirreira in #3090
  • fix(bookings): let a scanned unit already on the booking answer a reservation by @DonKoko in #3102
  • fix(assets,custom-fields): stop forms rejecting values the rest of the app accepts by @DonKoko in #3101
  • fix(reports,assets,qr): three server paths that answered silently wrong by @DonKoko in #3108
  • fix(kits,assets,locations): three surfaces that used data they already had wrong by @DonKoko in #3109
  • fix(kits): name the holder of a kit whose member is out on its own by @DonKoko in #3111
  • fix(csv): export and restore pool placements in the backup by @carlosvirreira in #3096
  • fix(invites): validate the whole users CSV before inviting anyone by @DonKoko in #3112
  • fix(bookings): skip a re-scanned kit and answer booking rules with 400s by @DonKoko in #3113
  • fix(assets): let the min quantity input accept the zero the schema allows by @DonKoko in #3115
  • fix(uploads): answer an unreadable image with a 400, not a crash by @DonKoko in #3117
  • fix(auth): find an account by email whatever case it was stored in by @DonKoko in #3120
  • fix(scanner,editor,billing): stop three matchers claiming more than they match by @DonKoko in #3121
  • fix(bookings): skip already-archived bookings in bulk archive by @DonKoko in #3122
  • fix(webapp): add Content-Disposition header to list/bulk CSV export routes by @Nofates in #3008
  • fix(sentry): mask email addresses in every payload sent to Sentry by @carlosvirreira in #3059
  • fix(tags,locations): label chips, honour Add another, name a location once by @DonKoko in #3123
  • fix(uploads,admin): let the file-size message reach the user, open real new tabs by @DonKoko in #3128
  • fix(bookings): re-measure model reservations when a draft starts claiming the pool by @DonKoko in #3126
  • fix(bookings): name the assets that block a booking's reservation by @DonKoko in #3129
  • fix(bookings): read quantity rows by the booking, not by pool custody by @carlosvirreira in #3093
  • fix(editor,calendar,admin): close the slash menu on blur, switch the calendar view once, free moved blobs by @DonKoko in #3131

⚡ Performance

  • perf(bookings): scope the booked-asset search to the workspace by @DonKoko in #3116

🧹 Chores

📚 Documentation

🌱 New Contributors

Full Changelog: https://github.com/Shelf-nu/shelf.nu/compare/shelf@2.2.1...shelf@2.3.0