Because the element is not visible, you can't interact with it from UI, like sendKeys. One approach is change the element attribute in background way through calling HTML DOM API
let upload_ele = driver.findElement(By.id('avatar-upload'))
let file_path = '/home/user/Desktop/smg935-0hero-0930.jpeg'
driver.executeScript('return arguments[0].value=arguments[1];', upload_ele, file_path)
There is a disadvantage of this approach, because it act in background, so it won't
trigger key/mouse events which bind to the element. If the upload widget listen on key event to detect user choose file or not, before user can continue click upload button. In such case the background approach won't work.
style : display-none, so WebDriverWait won't help