Client-side logic has the advantage of being low latency, so user experience is better.
But for multiplayer games, this is a major problem - client side logic can be altered so that cheating works.
In 2018, for most browser based games, server-side logic is sent fast enough because of internet speeds to not cause a bad user experience, and has the massive benefit of being safe from cheating. It also prevents clients 'getting out of sync' accidentally even if not an intentional cheat. Finally it helps protect your source code from people who would just clone your client and make their own identical game.
The ideal implementation would be client-side logic which executes first, then server-side logic which executes, and if they mismatch, the game state is updated to the authoritative one dictated by the server. This allows low-latency for the clients and prevents cheating. The problem with this ideal implementation is that it's complicated, and not necessary for most use cases.