I treat those steps as mutations. One creates a object/URL, one uploads to it (probably using fetch directly), final mutation confirms the upload is ready for the backend
But it doesn’t matter hugely if you want to use the vanilla client instead, you’ll have to maintain whatever loading state yourself anyway with that middle fetch call involved